-중복을 허용하지 않음.
-순서가 없음.
public class SetEx1 {
public static void main(String[] args) {
Set<String> words = new HashSet<>();//Set은 순서가 없다.
words.add("java");
words.add("database");
words.add("java");//중복 데이터를 넣으면 안들어감.
System.out.println(words);//[database, java]
System.out.println(words.contains("java"));//true
for(String element : words)
System.out.println(element);
}
}
-hashCode()는 이름표나 사인과 같은 개념으로 생각한다.
-hashCode()가 다르면 다른 오브젝트로 판단한다.
-hashCode()가 같으면 equals()를 실행해서 같은 오브젝트인지 다른 오브젝트인지 최종 판단
-hashCode()가 equals()보다 빠르기 때문에 hashCode()를 사용하면 두 오브젝트가 다른지 빠르게 판단할 수 있다.
-Set에 오브젝트를 넣을 때에는 그 오브젝트의 hashCode()와 equals()를 제대로 구현해야 중복방지를 할 수 있다.
//Point.class
public class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
@Override
public String toString() {
return "Point{" +
"x=" + x +
", y=" + y +
'}';
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Point){
Point p = (Point) obj;
return this.x == p.getX() && this.y == p.getY();
}
return false;
}
@Override
public int hashCode() {
return Objects.hash(x, y);
}
}
//SetEx2.class
public class SetEx2 {
public static void main(String[] args) {
//두 점이 같은지 아닌지 판단하려면 Point에 hashCode()와 equals()를 구현해야한다
//hashCode() 값이 같고 equals()가 true이면 같은 오브젝트이다.
Set<Point> points = new HashSet<>();
Point p1 = new Point(3,4);
Point p2 = new Point(1,2);
Point p3 = new Point(1,2);
points.add(p1);
points.add(p2);
points.add(p3);
System.out.println(points);
System.out.println(p2.equals(p3));
System.out.printf("p2.hashCode()=%d, p3.hashCode()=%d\n", p2.hashCode(), p3.hashCode());
}
}
-key~value 쌍을 이룬다.
-key값은 중복을 허용하지않는다.
-순서가 없다.
public class MapEx1 {
public static void main(String[] args) {
Map<String, String> dic = new HashMap<>();
dic.put("baby", "아기");
dic.put("love", "사랑");
dic.put("apple", "사과");
System.out.println(dic);//{love=사랑, apple=사과, baby=아기}
System.out.println(dic.get("baby"));
System.out.println(dic.get("love"));
System.out.println(dic.get("apple"));
}
}
public class MapEx2 {
public static void main(String[] args) {
Map<String, Integer> scoreMap = new HashMap<>();
scoreMap.put("김성동", 97);
scoreMap.put("황기태", 88);
scoreMap.put("김남윤", 98);
scoreMap.put("이재문", 70);
scoreMap.put("한원선", 99);
System.out.println(scoreMap);
System.out.println("HashMap의 요소 개수 : " + scoreMap.size());
System.out.println(scoreMap.get("이재문"));
//모든 엔트리 꺼내기(방법1)
Set<String> keySet = scoreMap.keySet();//키 컬렉션은 set
for (String key : keySet) {
int value = scoreMap.get(key);
System.out.printf("%s : %d\n", key, value);
}
//모든 엔트리 꺼내기(방법2) map은 entry의 set
Set<Map.Entry<String, Integer>> entrySet = scoreMap.entrySet();
for (Map.Entry<String, Integer> entry : entrySet) {
System.out.printf("%s : %d\n", entry.getKey(), entry.getValue());
}
}
}