- Set (집합의 느낌으로 생각)

Set는 중복되는 값은 새 배열에 추가되지 않는다. 데이터의 순서가 보장되지 않음.

- List

추가하는 모든 값이 새 배열에 들어간다. 순서대로 데이터가 들어감.

 

import java.util.HashSet;

import java.util.Iterator;

 

public class SetDemo {

 

public static void main(String[] args) {

HashSet<Integer> A = new HashSet<Integer>();

A.add(1);

A.add(2);

A.add(3);

 

HashSet<Integer> B = new HashSet<Integer>();

B.add(3);

B.add(4);

B.add(5);

 

HashSet<Integer> C = new HashSet<Integer>();

C.add(1);

C.add(2);

 

System.out.println(A.containsAll(B)); // false

System.out.println(A.containsAll(C)); // true

 

// A.addAll(B); // AB의 합집합, A1 2 3 4 5 가 들어가게 됨.

// A.retainAll(B); // AB의 교집합, A3만 남게 됨.

// A.removeAll(B); // A에서 B를 뺀 차집합, A1 2 가 남게 됨.

Iterator hi = A.iterator();

while(hi.hasNext()) {

System.out.println(hi.next());

}

 

 

}

 

}

 

 

iterator 메소드는 데이터를 꺼내기 위한 Iterator라는 데이터 타입의 객체(인터페이스)를 리턴한다.

Iterator 라는 인터페이스는 hasNextnext 라는 메소드를 갖고 있음.

hasNext 메소드는 꺼낼 것이 있으면 true, 없으면 false를 리턴함.

next 메소드는 하나를 꺼내면 자동으로 다음것을 참조함.

Collection 인터페이스를 구현하는 클래스와 인터페이스는 모두 iterator 메소드를 가지고 있음.

 

 

- Map (Collection을 구현하고 있지 않음)

 

Mapkeyvalue값을 갖는데, key값은 중복이 안 되지만 value값은 중복이 됨.

 

import java.util.Collection;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Set;

 

public class MapDemo {

 

public static void main(String[] args) {

HashMap<String, Integer> a = new HashMap<String, Integer>();

a.put("one", 1);

a.put("two", 2);

a.put("three", 3);

a.put("four", 4);

 

System.out.println(a.get("one"));

System.out.println(a.get("two"));

System.out.println(a.get("three"));

 

iteratorUsingForEach(a);

iteratorUsingIterator(a);

 

}

 

static void iteratorUsingForEach(HashMap<String, Integer> map) {

Set<Map.Entry<String, Integer>> entries = map.entrySet();

// entrySet 메소드를 통해 map 안의 값이 Set 타입의 entries로 들어감.

for (Map.Entry<String, Integer> entry : entries) {

// entries에 담긴 값이 entry로 들어가게 됨

System.out.println(entry.getKey() + " : " + entry.getValue());

// entry에 있는 key값과 value 값이 getKeygetValue를 통해 각각 나오게 됨.

}

 

}

static void iteratorUsingIterator(HashMap<String, Integer> map) {

Set<Map.Entry<String, Integer>> entries = map.entrySet();

Iterator<Map.Entry<String, Integer>> i = entries.iterator();

while(i.hasNext()) {

Map.Entry<String, Integer> entry = i.next();

System.out.println(entry.getKey()+" : "+entry.getValue());

}

 

 

}

}

 

 

put이라는 메소드는 Map 인터페이스에만 존재함.

제네릭에서 앞에 있는 인자 Stringkey를 의미하고 뒤의 Integervalue를 의미함.

get메소드에 key 값을 입력해서 value 값을 리턴할 수 있음.

 

iteratorUsingForEach iteratorUsingIterator 는 각각 For each문과 Iterator를 이용해서 Hash맵의 KeyValue를 조회하는 메소드이다.

Map.Entry 라는 인터페이스에는 getKeygetValue라는 중요한 메소드가 있음.

 

- Collections와 정렬

import java.util.*;

 

class Computer implements Comparable{

int serial;

String owner;

Computer(int serial, String owner){

this.serial = serial;

this.owner = owner;

}

public int compareTo(Object o) {

return this.serial - ((Computer)o).serial;

}

public String toString(){

return serial+" "+owner;

}

}

 

public class CollectionsDemo {

 

public static void main(String[] args) {

List<Computer> computers = new ArrayList<Computer>();

computers.add(new Computer(500, "egoing"));

computers.add(new Computer(200, "leezche"));

computers.add(new Computer(3233, "graphittie"));

Iterator i = computers.iterator();

System.out.println("before");

while(i.hasNext()){

System.out.println(i.next());

}

Collections.sort(computers);

System.out.println("\nafter");

i = computers.iterator();

while(i.hasNext()){

System.out.println(i.next());

}

}

 

}

 

Collections라는 클래스는 sort라는 메소드가 있는데, list 데이터 타입을 정렬해준다.

list의 각각의 객체들은 Comparable 이라는 인터페이스를 implements 하고 있어야 sort를 할 수 있다.

그런데 ComparablecompareTo라는 메소드를 구현하도록 강제하는 인터페이스이다.

그러므로 조건을 준수하기 위해 compareTo를 구현해야 한다는 점을 알아두어야 한다.

 

위의 코드에서 메소드 sort를 실행하면 내부적으로 compareTo를 실행하고 그 결과에 따라서 객체의 선후 관계를 판별하여 데이터가 정렬이 된다.


여러번 보고, 여러번 쳐보면서 익숙해지기

'Java > Java의 정석' 카테고리의 다른 글

220225 Java - IO  (0) 2022.02.25
220224 Java - Date, Calendar, time패키지  (0) 2022.02.24
220222 Java - 참조, 제네릭+Collections framework  (0) 2022.02.23
220221 Java - 중급 및 복습  (0) 2022.02.21
220220 Java - 중급  (0) 2022.02.20

+ Recent posts