2018-4-16 JAVA collection Frameworks - Map
Map<K, V>
- Key는 지표이므로 중복될 수 없다. 반면 Key가 다르면 Value는 중복되어도 상관없다.
- Map<K, V>를 구현하는 대표클래스로 HashMap<K, V>, TreeMap<K, V>가 있다. 둘의 차이는 TreeMap은 정렬을 유지한다. 정렬의 대상은 Key가 아니라, Value이다.
package yoon;
import java.util.HashMap;
public class HashMapCollection {
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
map.put(45, "Brown");
map.put(37, "James");
map.put(23, "Matrin");
System.out.println("23 번 : " + map.get(23));
System.out.println("37 번 : " + map.get(37));
System.out.println("45 번 : " + map.get(45));
System.out.println();
// delete data
map.remove(37);
// 데이터 삭제 확인
System.out.println(map.get(37));
}
}
//result
23 번 : Matrin
37 번 : James
45 번 : Brown
null
- HashMap에서는 Iterable<T>인터페이스를 구현하지 않아서, public Set<K> keySet()이 존재한다.
package yoon;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class HashMapIteration {
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
map.put(45, "Brown");
map.put(37, "James");
map.put(23, "Matrin");
// Key만 담고 있는 컬렉션 인스턴스 생성
Set<Integer> ks = map.keySet();
// 전체 Key출력(for-each문 기반)
for(Integer n : ks)
System.out.print(n.toString() + "\t");
System.out.println();
// 전체 Value 출력(for-each)
for (Integer n : ks)
System.out.print(map.get(n).toString() + "\t");
System.out.println();
// 전체 Value출력(반복자 기반)
for (Iterator<Integer> itr = ks.iterator(); itr.hasNext(); )
System.out.print(map.get(itr.next()) + "\t");
System.out.println();
}
}
//result
37 23 45
James Matrin Brown
James Matrin Brown
TreeMap기반
package yoon;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;
public class TreeMapIteration {
public static void main(String[] args) {
TreeMap<Integer, String> map = new TreeMap<>();
map.put(45, "Brown");
map.put(37, "James");
map.put(23, "Matrin");
// Key만 담고 있는 컬렉션 인스턴스 생성
Set<Integer> ks = map.keySet();
// 전체 Key출력(for-each문 기반)
for(Integer n : ks)
System.out.print(n.toString() + "\t");
System.out.println();
// 전체 Value 출력(for-each)
for (Integer n : ks)
System.out.print(map.get(n).toString() + "\t");
System.out.println();
// 전체 Value출력(반복자 기반)
for (Iterator<Integer> itr = ks.iterator(); itr.hasNext(); )
System.out.print(map.get(itr.next()) + "\t");
System.out.println();
}
}
//result
23 37 45
Matrin James Brown
Matrin James Brown
// ComparatorTreeMap
package yoon;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;
class AgeComparator implements Comparator<Integer> {
public int compare(Integer n1, Integer n2) {
return n2.intValue() - n1.intValue();
}
}
public class ComparatorTreeMap {
public static void main(String[] args) {
TreeMap<Integer, String> map = new TreeMap<>(new AgeComparator());
map.put(45, "Brown");
map.put(37, "James");
map.put(23, "Martin");
// Key만 담고 있는 컬렉션 인스턴스
Set<Integer> ks = map.keySet();
// print whole key(based for-each)
for (Integer n : ks)
System.out.print(n.toString() + "\t");
System.out.println();
// print whole value
for (Integer n : ks)
System.out.print(map.get(n).toString() + "\t");
System.out.println();
// print whole value(based Iterator)
for (Iterator<Integer> itr = ks.iterator(); itr.hasNext(); )
System.out.print(map.get(itr.next()) + "\t");
System.out.println();
}
}
//result
45 37 23
Brown James Martin
Brown James Martin
정렬
- public static <T> void sort(List<T> list) : 메소드 호출 시점에 T가 결정되므로 List<T>의 인스턴스는 모두 전달 가능하다.
- public static <T extends Comparable<T» void sort(List<T> list) : T는 Comparable<T> 인터페이스를 구현한 상태여야한다.
public static <T extends Comparable<T» void sort(List<T> list)
- 인자로 List<T>의 인스턴스 모두 전달 가능
- 단, T는 Comparable<T> 인터페이스를 구현한 상태여야한다.
public static void main(String [] args) {
List\<String> list = ...;
Collections.sort(list); // List\<T>의 인스턴스가 인자 전달
}
- String은 Comparable<String>을 구현한다. 따라서 인자로 전달이 가능하다.
package yoon;
import java.util.*;
public class SortCollections {
public static void main(String[] args) {
List<String> list = Arrays.asList("Toy", "Box", "Robot", "Weapon");
list = new ArrayList<>(list);
// 정렬 이전 출력
for (Iterator<String> itr = list.iterator(); itr.hasNext(); )
System.out.print(itr.next() + "\t");
System.out.println();
// sorting
Collections.sort(list);
// 정렬 이후 출력
for (Iterator<String> itr = list.iterator(); itr.hasNext(); )
System.out.print(itr.next() + "\t");
System.out.println();
}
}
//result
Toy Box Robot Weapon
Box Robot Toy Weapon
package yoon;
import java.util.*;
class Car implements Comparator<Car> {
protected int disp; // 배기량
public Car(int d) {
disp = d;
}
@Override
public String toString() {
return "cc" + disp;
}
@Override
public int compareTo(Car o) {
return disp - o.disp;
}
}
class ECar extends Car {
private int battery;
public ECar(int d, int b) {
super(d);
battery = b;
}
@Override
public String toString() {
return "cc: " + disp + ", ba: " + battery;
}
}
public class ECarSortCollections {
public static void main(String[] args) {
List<ECar> list = new ArrayList<>();
list.add(new ECar(1200, 99));
list.add(new ECar(3000, 55));
list.add(new ECar(1800, 87));
Collections.sort(list);
for (Iterator<ECar> itr = list.iterator(); itr.hasNext(); )
System.out.println(itr.next().toString() + "\t");
}
}
Written on April 16, 2018