□ Collection framework 구성
- set : 중복을 허용하지 않음(순서가 보장되지 않음)
- list : 중복 허용(순서 보장)
□ ArrayList
배열은 크기를 한번 지정하면 크기를 초과할 수 없지만
ArrayList는 크기를 미리 지정하지 않기 때문에 얼마든지 많은 값을 저장할 수 있다.
구분 | 배열 | ArrayList |
값의 개수 | .length | .size |
출력 | [인덱스번호] | .get(인덱스번호) |
※ ArrayList의 메소드 add의 입장에서는 인자로 어떤 형태의 값이 올지 알 수 없다.
그렇기 때문에 모든 데이터 타입의 조상인 Object 형식으로 데이터를 받고 있다.
따라서 ArrayList 내에서 add를 통해서 입력된 값은 Object의 데이터 타입을 가지고 있고, get을 이용해서 이를 꺼내도
Object의 데이터 타입을 가지고 있게 된다.
제네릭을 사용하면 ArrayList 내에서 사용할 데이터 타입을 인스턴스를 생성할 때 지정할 수 있기 때문에
데이터를 꺼낼 때(String val = al.get(i);) 형변환을 하지 않아도 된다.
□ HashSet
구분 | 명령어 | 해석 |
부분집합(subset) | A.containsAll(B) | B는 A의 부분집합이다. |
합집합(union) | A.addall(B) | A와 B의 합집합 |
교집합(intersect) | A.retainAll(B) | A와 B의 교집합 |
차집합(difference) | A.removeAll(B) | A에서 B를 뺀 차집합 |
□ iterator
메소드 iterator는 인터페이스 Collection에 정의되어 있다.
따라서 Collection을 구현하고 있는 모든 컬렉션즈 프레임웍크는 이 메소드를 구현하고 있음을 보증한다.
메소드 iterator의 호출 결과는 인터페이스 iterator를 구현한 객체를 리턴한다.
인터페이스 iterator는 아래 3개의 메소드를 구현하도록 강제하고 있는데 각각의 역할은 아래와 같다.
- hasNext
반복할 데이터가 더 있으면 true, 더 이상 반복할 데이터가 없다면 false를 리턴한다. - next
hasNext가 true라는 것은 next가 리턴할 데이터가 존재한다는 의미다.
이러한 기능을 조합하면 for 문을 이용하는 것과 동일하게 데이터를 순차적으로 처리할 수 있다.
다음 코드를 해석하면
- A라는 HashSet이 {1,2,3} 생성되고
- A.iterator();를 통해 hi = {1,2,3}가 생성되고
- while문이 실행되게 되면 위에 설명된 hasNext로 인해 hi안에 반복할 데이터가 있으므로 true
- hi.next가 실행되게 되면 {1,2,3}중 하나가 출력되고 출력된 값이 사라진다.
- 다시 while문으로 넘어가 아직 2개의 값이 남아있으므로 true가 되어 실행되며 반복되게 된다.
위 코드에서 HashSet 데이터 타입 부분을 ArrayList나 Collection으로 바꿔도 코드 실행에는 문제가 없다.
□ Map
Map에서 데이터를 추가할 때 사용하는 API는 put이다.
put의 첫번째 인자는 값의 key이고, 두번째 인자는 key에대한 값(value)이다.
key를 이용해서 값(value)을 가져올 수 있다.
메소드 entrySet은 Map의 데이터를 담고 있는 Set을 반환한다.
반환한 Set의 값이 사용할 데이터 타입은 Map.Entry이다.
Map.Entry는 인터페이스인데 아래와 같은 API를 가지고 있다.
- getKey
- getValue
위의 API를 이용해서 Map의 key, value를 조회할 수 있다.
□ Collections
클래스 Collections는 다양한 클래스 메소드를 가지고 있다.
메소드 sort는 그 중의 하나로 List의 정렬을 수행한다.
sort의 인자인 list는 데이터 타입이 List이다.
즉 메소드 sort는 List 형식의 컬렉션을 지원한다는 것을 알 수 있다.
인자 list의 제네릭 <T>는 coparable을 extends 하고 있어야 한다.
Comparable은 인터페이스인데 이를 구현하고 있는 클래스는 아래 메소드를 가지고 있어야 한다.
메소드 sort를 실행하면 내부적으로 compareTo를 실행하고 그 결과에 따라서 객체의 선후 관계를 판별하게 된다.
참조 : Collections Framework Class diagram (backup)
출처 : 생활코딩 유튜브 :
https://www.youtube.com/watch?v=KaPbVAxi5LE&list=PLuHgQVnccGMCeAy-2-llhw3nWoQKUvQck&index=151
'Java & Spring > Java' 카테고리의 다른 글
배열 부분 복사 'Arrays.copyOfRange()' (0) | 2024.07.22 |
---|---|
문자열 값 비교 'str.compareTo()' (0) | 2024.07.19 |
생활코딩 - Java(참조) (0) | 2024.04.18 |
생활코딩 - Java(상수와 enum) (0) | 2024.04.17 |
생활코딩 - Java(Object 클래스) (0) | 2024.04.16 |