컬렉션 : COLLECTION

·4일 전
0

JAVA

목록 보기
8/8

🤍 1) 컬렉션이란

컴퓨터 시스템에서 데이터를 효율적으로 저장 및 관리하는 법

컬렉션 3대 인터페이스 : SET, LIST, MAP
=> 각 인터페이스를 구현한 구현체 클래스들이 제공된다.
=> 이 중 Set과 List 계열은 Collention 인터페이스를 공동으로 상속받았으므로 대부분의 메서드가 동일함


📌 (1) Set 계열

  1. 저장 순서가 유지되지 않는다. (인덱스 사용 불가)
  2. 데이터 중복을 허용하지 않음 (중복 데이터 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]
  

📌 (2) List 계열

  1. 인덱스 번호를 이용하여 저장 순서가 유지됨
  2. 데이터 중복 허용
  3. 배열과 유사하나, 배열과 달리 저장 공간이 자동 확장된다.

< 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);
		

📌 (3) Map 계열

  1. 데이터 키와 값 한 쌍의 형태로 관리하는 자료 구조 (해쉬테이블 구조)
  2. 키는 중복이 불가능하며, 값은 중복 가능함

< 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));

코테 전 발등에 불떨어짐 이슈 .. !! ㅠㅠ

profile
~*

0개의 댓글