Day23 :) Collection Framework - Set, List, Iterator

Nux·2021년 10월 6일
0

자바웹개발

목록 보기
23/105
post-thumbnail
post-custom-banner

  • java.util에 포함되어 있음
  • 자료구조를 구현
    • 자료구조: 데이터의 저장/삭제/조회 등의 기능을 제공.
      • 객체만 가능
      • 크기가 가변적
      • 다양한 메서드 지원

Collection<E>

  • 모든 자료구조의 최상위 인터페이스
  • 대표적 자료구조: Set, List, Map

Set<E>

Set<타입> 변수값 = new Set<타입>();

  • import java.util.Set;
  • 배열을 구현하는 클래스
  • 중복 불가. 임의 순서(넣고 뺀 대로 정해지지 않음)

HashSet<E>

Set<데이터타입> 객체명 = new HashSet<데이터타입>();

  • import java.util.HashSet;
  • 가장 보편적으로 사용되는 Set 구현 클래스
  • 일반 배열은 배열의 크기와 인덱스를 미리 정해야 하지만
    HashSet은 인덱스없이 자동 저장하며, 크기도 가변적
  • 일반배열처럼 for로 출력 가능. 출력 순서는 입력순서와 다름

주요 메서드

  • 객체명.add(값): 값을 HashSet에 저장.
    • 같은 값을 넣어도 중복을 허용하지 않으므로 최초 한번만 저장
    • 객체 저장시, 두 객체 내 값이 동일해도 주소값이 다르므로 저장 가능
HashSet<String> set = new HashSet<>();

set.add("김윤석");
set.add("류승룡");
set.add("김윤석");
System.out.println(set);
// 출력값 [김윤석, 류승룡]
  • 객체명.isEmpty(): 객체가 없으면 true 반환
System.out.println(set.isEmpty);	// false
  • 객체명.clear(): 저장된 모든 객체 삭제
  • Set.of(E e,...,E e): HashSet<E>의 부모인터페이스인 set<E>에 존재하는 정적메서드.
    Set의 구현객체를 생성함
Set<String> names = set.of("값1", "값2", "값3")
// names라는 배열에 값1, 값2, 값3이 저장됨(순서 임의)
  • add All(Collection<? extends E> collection): 다른 Collection구현객체에 저장된 데이터를 전부 저장함.
    • Collection구현객체가 E자신이나 하위객체를 저장하고 있어야함.
    • E는 add All() 메서드를 호출하는 객체의 타입 파라미터를 따름
  • 객체명.size(): 저장된 객체의 갯수 반환
  • 객체명.contains(값): 객체 내에 값이 있는지 확인 후 boolean 타입으로 반환
System.out.println(set.contains("김윤석"));	// true
System.out.println(set.contains("송강호"));	//	false
  • 객체명.remove(값): 값이 존재하면 삭제
add.remove("류승룡");
System.out.println(set);
// 출력값 [김윤석]

TreeSet<E>

  • import java.util.TreeSet
  • HashSet처럼 배열을 저장하고 다루는 Set 구현 클래스
  • 랜덤으로 저장되는 Set과 다르게 오름차순으로 순서대로 저장됨

List<E>

  • import java.util.List;
  • 배열을 구현하는 클래스
  • Set과 다르게 중복값을 허용하며 넣고 빼는 순서가 정해져있음

ArrayList<E>


List<데이터타입> 객체명 = new ArrayList<>();

  • import java.util.ArrayList;
  • 일반 배열과 같이 순차대로 값이 저장되고 빠져나가며 인덱스로 내부 객체 관리
  • 크기가 가변적이므로 추가/삭제시 길이가 자동조정됨

주요 메서드

HashSet과 거의 유사하나, 추가적으로 index자리를 지정해주는 메서드가 존재함
  • 객체명.add(값): 값을 ArrayList에 저장
    • 저장한 순서대로 인덱스에 들어감
List<String> fruits = new ArrayList<>();

fruits.add("딸기");
fruits.add("사과");
fruits.add("복숭아");
fruits.add("사과");
System.out.println(fruits);
// 출력값 [딸기, 사과, 복숭아, 사과]
  • 객체명.size(): ArrayList에 저장된 객체의 개수 반환
System.out.println(fruits.size());
// 출력값 4
  • 객체명.isEmpty(): 저장된 객체가 없으면 true 반환
System.out.println(fruits.isEmpty());
// 출력값 false
  • 객체명.contains(값): ArrayList내에 값이 있으면 true 반환
System.out.println(fruits.contains("고구마"));
// 출력값 false
System.out.println(fruits.contains("복숭아"));
// 출력값 true
  • 객체명.remove(값): ArrayList내의 값 삭제
    • 중복값이 있을 시 맨 처음 값만 삭제
    • 중간값 삭제 시, 뒷부분이 삭제된 부분으로 하나씩 당겨져옴
fruits.remove("사과")
System.out.println(fruits);
// 출력값 [딸기, 복숭아, 사과]
  • 객체명.clear(): 저장된 모든 값 삭제
fruits.clear();
System.out.println(fruits);
// 출력값 []

ArrayList의 고유메서드(HashSet에 없음)

  • 객체명.add(index, 값): index자리에 값이 추가됨
    • 해당 자리에 있던 값은 뒤로 하나씩 밀림
List<String> food = new ArrayList<>();

food.add("김치");
food.add("마라탕");
food.add("초밥");
System.out.println(food);
// 출력값 [김치, 마라탕, 초밥]
food.add(1, "피자")
System.out.println(food);
// 출력값 [김치, 피자, 마라탕, 초밥]
  • 객체명.set(index, 값): index자리의 값이 지정한 값으로 교체됨
food.set(1, "순대국");
System.out.println(food);
// 출력값 [김치, 순대국, 마라탕, 초밥]
  • 객체명.get(index): index위치의 값 반환
String a = food.get(2)
System.out.println(a);
// 출력값 마라탕

LinkedList<E>와의 비교

  • ArrayList에서는 값을 추가/삭제 시 뒤의 값들이 전부 이동함
  • 데이터가 많아질수록 효율이 떨어짐
  • 이때, LinkedList<E>를 사용하면 메모리 부하가 적어짐

Iterator<E>


Iterater<타입> 변수명 = 배열명.iterator();

  • import java.util.Iterator;
  • 배열이나 유사한 자료구조의 내부를 순회하는 객체
  • 1회용으로, 재사용불가
  • Iterator에서 쓰이는 메서드
    • hasNext() 다음 데이터가 있는지 여부를 boolean으로 반환
    • next() 다음 요소 호출
    • remove() next메소드가 호출한 데이터 삭제
  • 반복문, 특히 while문과 함께 쓰임
List a = new ArrayList();
Iterator b = a.iterator();
while(b.hasNext()){			// 다음요소가 있을 시 true를 반환하므로 배열의 끝까지 검사 가능
	System.out.println(b.next());	// 순차적으로 a.iterator()의 값 출력
}
post-custom-banner

0개의 댓글