컴퓨터 시스템에서 데이터를 효율적으로 저장 및 관리하는 법
컬렉션 3대 인터페이스 : SET, LIST, MAP
=> 각 인터페이스를 구현한 구현체 클래스들이 제공된다.
=> 이 중 Set과 List 계열은 Collention 인터페이스를 공동으로 상속받았으므로 대부분의 메서드가 동일함
- 저장 순서가 유지되지 않는다. (인덱스 사용 불가)
- 데이터 중복을 허용하지 않음 (중복 데이터 X)
-> 효율적인 중복 제거 수단으로 사용됨
< Set 계열의 구현체 클래스 >
HashSet, LikedHashSet(순서), TreeSet(정렬)
HashSet set1 = new HashSet(); /* 일반적인 HashSet 객체 생성 */
Set set2 = new HashSet(); /* 업캐스팅 */
< Set 계열의 메서드 >
// 비어있는지, 개수, 모든 요소 출력
System.out.println("Set 객체가 비어있는가?" set.isEmpty);
System.out.println("Set 객체에 저장된 요소 개수 " set.size() );
System.out.println("Set 객체의 모든 요소 " + set);
/* --------------------------------------------------------- */
// 추가 방법 및 포함 여부
System.out.println("요소 추가 방법 : " + set.add(9));
System.out.println("9가 포함되어 있는가? " + set.contains(9));
/* -------------------------------------------------------- */
// set 옮기기
Set set2 = new HashSet();
System.out.println("set2에 set객체 모두 추가 : " + set2.addAll(set));
// 모두 제거
set2.clear();
/* -------------------------------------------------------- */
Set set4 = new HashSet();
set4.add(100);
set4.add(99);
set4.add(500);
set4.add(2);
set4.add(35);
set4.add(999);
// 정렬
Set set5 = new TreeSet(set4);
System.out.println(set5); // [2, 35, 99, 100, 500, 999] 크기순으로 정렬
/* -------------------------------------------------------- */
Set<Integer> set6 = new LinkedHashSet();
set6.add(100);
set6.add(99);
set6.add(500);
set6.add(2);
set6.add(35);
set6.add(999);
// 순서
System.out.println(set6); // [100, 99, 500, 2, 35, 999]
- 인덱스 번호를 이용하여 저장 순서가 유지됨
- 데이터 중복 허용
- 배열과 유사하나, 배열과 달리 저장 공간이 자동 확장된다.
< List 계열의 구현체 클래스 >
: ArrayList, Vector, LikedList 등
< ArrayList VS Vector >
: 기본적인 구조가 동일하며, 메서드가 동일하다
: Vector의 경우 멀티쓰레드 환경에서 안전하게 객체를 사용할 수 있다.
: ArrayList는 멀티쓰레드 환경을 지원하지 않음
< ArrayList VS LinkedList >
: 기본적인 구조가 완전 다르며 메서드는 동일하다
: ArrayList는 배열구조로써 인덱스를 활용하여 데이터 탐색이나 순차적인 추가 / 삭제가 빠르다
: LinkedList는 다음 데이터 위치를 현재 데이터가 갖고 있는 형태 데이터 탐색이나 순차적인 작업은 느리다
< List 계열의 메서드 >
List list = new ArrayList();
// (1) 추가
list.add("RED");
list.add(1);
list.add(3.14);
// (1-1) 중복 데이터 추가
list.add(1); // 가능
// (1-2) 인덱스를 이용하여 추가
list.add(2,3) // 기존의 2번 인덱스를 밀어내고 정수 3을 2번 인덱스에 삽입
// (2) 비어있는지, 개수 출력, 요소 모두 출력
System.out.println("list 객체가 비어있는가? " + list.isEmpty);
System.out.println("list 객체에 저장된 요소 개수 : " + list.size());
System.out.println("list 객체의 모든 요소 : " + list);
// (3) 출력
System.out.println("3번 인덱스 요소 출력 : " +list.get(3));
// (4) 제거
// Object remove(int index): index에 해당하는 요소 제거 (제거되는 요소 리턴)
// boolean remove(Object o): o에 해당하는 객체 제거(제거될 경우 true 리턴)
//System.out.println("인덱스를 사용하여 정수2(인덱스1) 삭제: " + list.remove(1));
//System.out.println("정수 2를 지정하여 해당 요소 직접 삭제: " + list.remove(2));
// => 정수 2를 지정하는 것이 아닌 2번 인덱스 지정으로 취급됨
// 따라서,정수2를 지정하여 삭제해야하는 경우 Object 타입으로 형변환 필요
System.out.println("정수 2를 지정하여 해당 요소 직접 삭제: " + list.remove((Object)2));
System.out.println("list 객체에 모든 요소 출력: " + list);
// (5) 인덱스 번호 알아내기
System.out.println("RED의 인덱스 번호 알아내기 : " + list.indexOf('RED') );
// (6) 정렬
List list3 = new ArrayList();
list3.add(3);
list3.add(4);
list3.add(1);
list3.add(6);
list3.add(5);
list3.add(2);
System.out.println("정렬 전: " + list3); // [3,4,1,6,5,2]
// Collections 클래스의 static 메서드 sort() 사용 시 List 객체 정렬 가능
Collections.sort(list3);
System.out.println("정렬 후: " + list3); // [1, 2, 3, 4, 5, 6]
// Collections 클래스의 static 메서드 shuffle() 사용 시 List 객체 섞기 가능
Collections.shuffle(list3);
System.out.println("셔플 후: " + list3); // [무작위]
// (7) 배열 전달
String [] str = new String[] {"a","b","c"};
List arrList = Arrays.asList(str);
// (8) Set과 List 상호 호환
Set set = new HashSet();
set.add(1); set.add(20); set.add(3); set.add(450); set.add(55);
List list4 = new ArrayList(set);
// (9) 중복 제거
// => 목표 ABCD, A, AB, ABC
List list5 = Arrays.asList("ABCD", "A", "ABCD", "AB", "A", "AB", "ABC");
Set set2 = new LinkedHashSet(list5); // 순서 유지되면서 중복 제거
List list6 = new ArrayList(set2);
- 데이터 키와 값 한 쌍의 형태로 관리하는 자료 구조 (해쉬테이블 구조)
- 키는 중복이 불가능하며, 값은 중복 가능함
< Map 계열의 구현체 클래스 >
: HashMap, LikedHashMap, TreeMap
< Map 계열의 메서드 >
map map = new HashMap();
// (1) 값 저장
map.put(1,"java");
map.put(2, "jsp");
map.put(3, "Spring");
// (1-1) 중복되는 키 사용할 경우
map.put(3,"oracle"); // 3번 값이 Spring -> Oralce로 바뀐다.
// (2) 출력
// (2-1) 모든 키 출력
Set keySet = map.ketSet();
System.out.println("map 객체 내의 모든 키 : " + keySet);
// (2-2) 모든 값 출력
System.out.println("map 객체 내의 모든 값 : " + map.values());
// (2-3) 키를 통해 값 출력
System.out.println("키 3번에 해당하는 값 출력 " + map.get(3));
코테 전 발등에 불떨어짐 이슈 .. !! ㅠㅠ