■ 컬렉션
- 자료구조 담당 프레임워크
1. 배열과 컬렉션 비교
- 크기 : 배열 불가, 컬렉션 가능
- 데이터 추가 삭제 : 배열 불편, 컬렉션 용이
- 데이터 타입 : 배열 1개, 컬렉션 여러개 가능
2. 분류
1) Collection
- List : ArrayList, Vector, LinkedList
- Set : HashSet, LinkedHashSet, TreeSet
2) Map
- HashMap, HashTable, TreeMap, Properties
■ List
- 자료들 순차적으로 늘어놓은 구조
- 중복 객체 저장 가능, null 값 저장 가능
- 인덱스로 관리하여 검색, 삭제 기능 제공
( 특정 인덱스 삭제 시 뒤의 인덱스 1씩 앞으로 당겨짐)
1. List 인터페이스 구현 클래스
1) ArrayList - 동기화 미제공
2) Vector - 동기화 제공(안전)
3) LinkedList - 데이터 앞뒤 노드들 링크해서 관리
2. List 정렬(오름차순, 내림차순)
1) Collection.sort() 이용
2) Comparable, Comparator 인터페이스 구현
- List 정렬 시 기준 지정을 위한 구현 인터페이스
- Wrapper 객체, 문자열은 Comparable 구현되어 있음
(그 외 객체는 Comparable 인터페이스 구현 후 사용 가능)
■ ArrayList
1. ArrayList 생성 및 주요 메소드
List list = new ArrayList();
list.add("안녕하세요"); // 객체 저장 add()
list.size();
double num = (Double) list.get(1); // 형 변환, 오토 언박싱
list.add(2, "반갑습니다"); // 인덱스 위치에 추가 가능
list.set(2, "고맙습니다"); // 인덱스 값 수정 가능
list.remove(Integer.valueOf(1)); // 인덱스 위치 객체 삭제 가능, 정수값 객체로 박싱
list.isEmpty(); // List가 비어 있으면 true 리턴
list.clear(); //List에 저장된 객체 모두 삭제
2. ArrayList 문자열, 정수 저장(제네릭스 사용)
1) 제네릭스(<>)
- 명시된 타입 객체만 사용 가능
- 객체 꺼낼 때 형 변환 불필요
List<String> list1 = new ArrayList<String>(); // <파라미터 타입> : 제네릭스
List<Integer> list2 = new ArrayList<Integer>();
Collections.sort(list1); // 오름차순
Collections.reverse(list1); // 내림차순
3. ArrayList 객체(Music) 저장 및 정렬
// Music 클래스 오버라이드
@Override
public int compareTo(Music music) {
return (this.ranking > music.ranking ) ? 1 :
(this.ranking == music.ranking) ? 0 : -1;
// 정렬 방식 추가 클래스
public class ArtistAcending implements Comparator<Music> {
@Override
public int compare(Music music1, Music music2) {
// String 클래스 CompareTO() 메소드 사용
int result = music1.getArtist().compareTo(music2.getArtist());
if(result == 0){
result = (music1.getRanking() > music2.getRanking()) ? 1 :
(music1.getRanking() == music2.getRanking()) ? 0 : -1;
}
return result;
}
}
List<Music> list = new ArrayList<>();
list.add(new Music("가가가", "A", 1));
Collections.sort(list, new ArtistAcending());
// 익명 구현 객체 사용
Collections.sort(list, new Comparator<Music>() {
@Override
public int compare(Music o1, Music o2) {
return 0;
}
});
Comparator<Music> comparator = new Comparator<Music>() {
@Override
public int compare(Music o1, Music o2) {
return o1.getTitle().compareTo(o2.getTitle());
}
};
// 람다식 사용
Collections.sort(list, (o1, o2) -> o1.getTitle().compareTo(o2.getTitle()));
■ Set
- 저장 순서 없는 구조
- 동일 객체 중복 저장 불가(null 값 중복 저장 불가)
- 인덱스 없음 (대신 iterator 사용)
- iterator() : 저장된 객체 한 번씨 가져옴
1. Set 인터페이스 구현 클래스
1) HashSet - hashCode(), equals() 사용하여 중복 객체 확인
2) LinckedHashSet - 입력한 순서대로 데이터 관리
3) TreeSet - 이진 트리 이용(검색 메소드 제공)
■ HashSet
Set<String> set = new HashSet<>();
// 출력 1. 향상된 for 문
for (String string : set) {
System.out.println(string);
}
// 출력 2. Iterator 반복자 사용
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()) { // hasNext() : 객체 있는지 확인
System.out.println(iterator.next()); // next() : 객체 1개 가져옴
}
// 출력 3. ArrayList 사용
ArrayList<String> list = new ArrayList<String>(set);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
// HashSet 객체 저장
Set<Music> set = new HashSet<Music>()
// 객체 사용 시 hashCode(), equals() 메소드 오버라이딩 해야 중복제거 됨
■ 기타





'국비과정' 카테고리의 다른 글
| 국비 22일차 - [네트워크, 스레드] (0) | 2022.04.25 |
|---|---|
| 국비 21일차 - [컬렉션] TreeSet, Map, HashMap, Properties, Generics, Lombok 라이브러리 (0) | 2022.04.22 |
| 국비 19일차 - [IO] InputStream, OutputStream, Reader, Writer (0) | 2022.04.20 |
| 국비 18일차 - [기본 API, 예외처리, IO] LocalDate, try-catch-finally, throws, File (0) | 2022.04.19 |
| 국비 17일차 - [기본 API] String, StringTokenizer , StringBuilder, Wrapper, Data (0) | 2022.04.18 |
댓글