컬렉션(Collection)

유재훈·2022년 10월 10일
1

JAVA_Study

목록 보기
1/3

컬렉션(Collection)

  • 메모리상에서 자료를 구조적으로 처리하는 방법을 자료구조라 일컫는데 컬렉션(Collection)은 자바에서 제공하고 자료구조를 담당하는 프레임 워크
  • 추가,삭제,정렬 등의 기능처리가 간단하게 해결되어 자료구조적 알고리즘을 구현할 필요 없음
  • java.util 패키지에 포함되며, 인터페이스를 통해 정형화된 방법으로 다양한 컬렉션 클래스 이용 가능

배열의 문제점

  1. 한번 크기를 지정하면 변경할 수 없다.
    -> 따라서 할당 시 넉넉한 크기로 할당하게 됨(메모리 낭비)
  2. 기록된 데이터에 대한 중간 위치의 추가, 삭제가 불편하다
  3. 한 타입의 데이터만 저장 가능하다.

컬렉션의 장점

  1. 저장하는 크기의 제약이 없다.
  2. 추가, 삭제, 정렬 등의 기능 처리가 간단하게 해결된다.
  3. 여러 타입의 데이터가 저장 가능하다.

컬렉션의 주요 인터페이스

List

  • 자료들을 순차적으로 나열한 자료구조로 인덱스로 관리되며, 중복해서 객체 저장 가능
  • 구현 클래스로 ArrayList와 Vector, LinkedList가 있음

List 주요 메소드

예제

		//List 객체 생성방법
		ArrayList list1 = new ArrayList();
		List list2 = new ArrayList(); //가장많이 사용
		Collection list3 = new ArrayList();
		
        //객체 추가
		list2.add("안녕하세요.");
		list2.add(123);
		list2.add(45.67);
		list2.add(true);
		list2.add(LocalDate.now());
		list2.add(true);
		list2.add(45.67);
        
        list2.add(2, "ㅋㅋㅋ"); //index 2번지에 ㅋㅋㅋ를 추가하고 기존에 있던 값은 하나씩 뒤로간다.
		
		list2.remove(1); //특정인덱스 삭제시 내부 요소 정리
		
		list2.set(4, LocalDateTime.now()); //특정인덱스 값 덮어쓰기
		
		System.out.println(list2.size()); //현재 저장된 요소의 개수

List 요소 전체 열람

		//1. 일반 for문
		for(int i = 0; i < list2.size();i++) {
			System.out.println(list2.get(i));
		}
		System.out.println();
		
		//2. for each문
		for(String str : list2) {
			System.out.println(str);
		}
		System.out.println();
		
		//3. Iterator객체
		Iterator<String> iter = list2.iterator();
		while(iter.hasNext()) {
			String next = iter.next();
			System.out.println(next);
		}

출력값
안녕하세요.
ㅋㅋㅋ
45.67
true
2022-10-11T00:36:30.361054
true
45.67

ArrayList

  • List의 후손으로 초기저장용량은 10으로 자동 설정/ 따로 지정 가능
  • 저장 용량을 초과한 객체들이 들어오면 자동으로 증가/ 고정도 가능
  • 동기화(Synchronized)를 제공하지 않음

Vector

  • List의 후손으로 ArrayList와 동등하지만 동기화(Synchronized)를 제공한다는 점이 ArrayList와의 차이점
  • List 객체들 중에서 가장 성능이 좋지 않음

LinkedList

  • List의 후손으로, 인접 참조를 링크해 체인처럼 관리
  • 특정 인덱스에서 객체를 제거하거나 추가하게 되면 바로 앞/뒤 링크만 변경하면 되기 떄문에 객체 삭제와 삽입이 빈번하게 일어나는 곳에서는 ArrayList보다 성능이 좋음

Set

  • 저장 순서가 유지되지 않고, 중복 객체도 저장하지 못하게 하는 자료구조
  • null도 중복을 허용하지 않기 때문에 1개의 null만 저장
  • 구현 클래스로 HashSet, LinkedHashSet, TreeSet이있음

Set 주요 메소드

예제

		//Set 객체 생성 방법
		HashSet<Integer> set = new HashSet<>();
		Set<String> set2 = new HashSet<>();
		Collection<Student> set3 = new HashSet<>();
		
		//요소 추가
		set2.add("안녕");
		set2.add("잘가");
		set2.add("안녕");
		set2.add("가을");
		set2.add("하늘");
		
		System.out.println(set2.size()); //저장된 전체 객체 수
		
		//요소 재거
		System.out.println(set2.remove("안녕")); 
        	
		//clear
		set2.clear(); //저장된 모든 객체를 삭제
		//isEmpty
		System.out.println(set2.isEmpty()); //컬렉션이 비어 있는지 조사

Set 요소 전체 열람

		//for each문
		for(String str : set2) {
			System.out.println(str);
		}
		System.out.println();
        
		//Iterator객체
		Iterator<String> iter = set2.iterator();
		while(iter.hasNext()) {
			String next = iter.next();
			System.out.println(next);
		}

출력값
4
true
잘가
가을
하늘
true

HashSet

  • Set에 객체를 저장할 때 hash함수를 사용하여 처리 속도가 빠름
  • 동일 객체 뿐 아니라 동등 객체도 중복하여 저장하지 않음

LinkedHashSet

-HashSet과 거의 동일하지만 Set에 추가되는 순서를 유지한다는 점이 다름

Iterator

Map

  • 키(key)와 값(value)으로 구성되어 있으며, 키와 값은 모두 객체
  • key를 통해 value를 찾는 방식
  • 키는 중복 저장을 허용하지 않고(Set방식), 값은 중복 저장 가능(List방식)
  • 키가 중복되는 경우, 기존에 있는 키에 해당하는 값을 덮어 씌움
  • 구현 클래스로 HashMap, Hashtable, LinkedHashMap, Properties, TreeMap 이 있음

Map 주요 매소드

예제

		//Map 객체 생성 방법
		HashMap<String,Object> map = new HashMap<String,Object>();
		Map<Integer,Student> map2 = new HashMap<Integer,Student>();
		
		
		//요소 추가
		//반환값 중복된 요소가 없다면, null이 반환 / 중복된 요소가 있다면, 제거된 값이 반환
		System.out.println(map.put("honggd", "홍길동"));//null
		System.out.println(map.put("sinsa", "신사임당")); //null
		System.out.println(map.put("today", LocalDate.now())); //null
		System.out.println(map.put("1234", 5678)); //null
		System.out.println(map.put("honggd", "마길동"));  //홍길동
		
		//특정요소 가져오기
		System.out.println(map.get("honggd"));//마길동
		System.out.println(map.get("today")); //2022-10-06
		System.out.println(map.get("zzzzzzZZzzz")); //null
		
		//특정요소 제거하기
		map.remove("today");
		
		//저장된 요소의 개수
		System.out.println(map.size());

Map 요소 전체 열람

  1. keySet : key값의 Set을 통해 map의 모든 요소 접근
  2. entrySet
    -Entry타입 - key/value을 묶어관리하는 타입(인터페이스)
Map<Integer,String> map = new HashMap<>();
		map.put(123, "홍길동");
		map.put(456, "신사임당");
		map.put(789, "유관순");
		
		//1. keySet
		//for each
		Set<Integer> keySet =  map.keySet();
		for(Integer key : keySet) {
			String value = map.get(key);
			System.out.println(key + "=" + value);
		}
		//Iterator
		Iterator<Integer> iter = keySet.iterator();
		while(iter.hasNext()) {
			Integer key = iter.next();
			String value = map.get(key);
			System.out.println(key + "=" + value);
		}
		
		//2. entrySet
		Set<Map.Entry<Integer,String>> entrySet = map.entrySet();
		//for each
		for(Map.Entry<Integer,String> entry : entrySet) {
			Integer key = entry.getKey();
			String value = entry.getValue();
			System.out.println(key + "=" + value);
		}
		//Iterator
		Iterator<Map.Entry<Integer,String>> iter2 = entrySet.iterator();
		while(iter2.hasNext()) {
			Map.Entry<Integer, String> entry = iter2.next();
			System.out.println(entry.getKey() + "=" + entry.getValue());
		}

출력값
789=유관순
456=신사임당
123=홍길동

HashMap

  • 키 객체는 hashCode()와 equals() 재정의해 동등 객체가 될 조건을 정해야함, 때문에 키 타입은 hashCode()와 equals()메소드가 재정의 되어있는 String타입을 주로 사용

0개의 댓글