본문 바로가기
BackEnd/Java

[Java] Collection 관련 주요 메소드와 활용법 (List, Set, Map, Iterator, Comparable)

by ryuneng 2025. 1. 15.
반응형

# 목적

: Collection 관련 주요 클래스, 메소드에 대한 이해와 활용법 학습




1. Collection 주요 메소드

- Collection<E> : 모든 자료구조 클래스의 최상위 인터페이스

1) boolean add(E e)
> 자료구조에 새로운 요소 추가

2) boolean addAll(Collection<? extends E> c)
> 자료구조에 다른 자료구조의 모든 요소 추가

3) void clear()
> 자료구조의 모든 요소 삭제

4) boolean contains(Object e)
> 자료구조에 지정된 객체가 존재하는지 조회

5) boolean isEmpty()
> 자료구조가 비었는지 조회

6) Iterator iterator()
> 자료구조의 각 요소를 반복해서 추출해주는 박복자객체를 반환

7) boolean remove(Object e)
> 자료구조에서 지정된 객체 삭제

8) int size()
> 자료구조에 저장된 요소의 갯수를 반환

9) Object[] toArray()
> 자료구조에 저장된 요소를 배열로 반환




2. List

- List<E> : 순서가 유지되는 데이터의 집합, Collection의 하위 인터페이스

(1) List 주요 메소드

1) void add(int index, E e)
> 지정된 위치에 요소 저장

2) E get(int index)
> 지정된 위치의 요소 꺼냄

3) E remove(int index)
> 지정된 위치의 요소 삭제

4) E set(int index, E e)
> 지정된 위치의 요소를 새 요소로 교체


(2) ArrayList 활용법

- ArrayList<E> : 가장 많이 사용하는 List 구현 클래스
public class Person {
    private int no;
    private String name;
	public person() {}
	public Person(int no, String name) {
		this.no = no;
		this.name = name;
	}
	public int getNo() {
		return no;
	}
	public String name() {
		return name;
	}
}
public static void main(String[] args) {
	// Person객체를 여러개 저장할 수 있는 ArrayList객체 생성
	List<Person> personList = new ArrayList<Person>();

	// ArrayList객체에 person객체 생성하기
	personList.add(new Person(10, "홍길동"));
	personList.add(new Person(20, "류관순"));
	personList.add(new Person(30, "이순신"));

	// ArrayList객체에 저장된 Person객체의 갯수 조회하기
	int count = personList.size();
	System.out.println("저장된 갯수: " + count); // 3이 출력됨

	// 향상된 for문을 사용해서 ArrayList객체에 저장된 Person객체를 순회하기
	for (Person person : personList) {
		int no = person.getNo();
		String name = person.getName();
		System.out.println("번호:" + no + ", 이름:" + name);
	}

	// ArrayList객체에서 0번에 저장된 Person객체 조회하기
	Person person0 = personList.get(0);

	// ArrayList객체에서 2번에 저장된 Person객체 삭제하기
	personList.remove(2);

	// ArrayList객체에서 1번에 저장된 객체를 새로운 Person객체로 변경하기
	personList.set(1, new Person(50, "안중근"));

	// ArrayList객체에 저장된 모든 객체 삭제하기
	personList.clear();
}




3. Set

- Set<E> : 순서를 유지하지 않는 데이터의 집합, Collection의 하위 인터페이스

(1) HashSet 활용법

- HashSet<E> : 가장 많이 사용하는 Set 구현 클래스
public static void main(String[] args) {
	// String객체를 여러개 저장하는 HashSet객체 생성하기
	Set<String> set = new HashSet<String>();

	// HashSet에 객체 저장하기
	set.add("홍길동");
	set.add("류관순");
	set.add("이순신");
	set.add("이순신"); // Set은 중복이 허용되지 않기 때문에 저장되지 않음

	// HashSet에 저장된 객체의 갯수 조회하기
	int count = set.size();
	System.out.println("저장된 객체의 갯수: " + count); // 3이 출력됨

	// HashSet이 지정된 객체를 포함하고 있는지 조회하기
	boolean hasElement = set.contains("류관순");
	System.out.println("류관순 포함 여부 : " + hasElement); // true가 출력됨

	// HashSet에서 지정된 객체 삭제하기
	set.remove("홍길동");

	// HashSet이 비어있는지 조회하기
	boolean empty = set.isEmpty();
	System.out.println("비어있는가?" + empty); // false가 출력됨

	// HashSet에 저장된 객체를 향상된 for문을 사용해서 순회하기
	for (String name : set) {
		System.out.println("저장된 이름: " + name);
	}

	// HashSet에 저장된 모든 객체 삭제하기
	set.clear();
}




4. Map

- Map<K, V>
: 데이터를 Key와 Value의 쌍으로 연결지어서 저장하는 객체,
  Entry<K, V> 객체를 여러개 저장하는 객체

* Entry<K, V> : Key와 Value의 쌍을 표현하는 객체

* Key와 Value의 예)
- Key : 값을 대표하는 키, 중복 x
- Value : 값, 중복 o

Key Value Map<K, V>
학번 학생객체 Map<Integer, Student>
주문번호 주문정보객체 Map<Long,Order>
사용자아이디 사용자정보객체 Map<String, User>
상품번호 상품정보객체 Map<Integer, Product>

(1) Map 주요 메소드

1) V put(K key, V value)
> Map객체에 key, value의 쌍을 저장

2) V get(Object key)
> Map객체에서 지정된 key에 해당하는 value 조회

3) V remove(Object key)
> Map객체에서 지정된 key에 해당하는 value 삭제

4) void clear()
> Map객체에 저장된 모든 key, value의 쌍을 삭제

5) int size()
> Map객체에 저장된 key, value쌍의 갯수 반환

6) boolean isEmpty()
> Map객체가 비어있으면 true를 반환

7) boolean containsKey(Object key)
> Map객체에 지정된 key가 포함되어 있는지 여부를 반환

8) boolean containsValue(Object value)
> Map객체에 지정된 value가 포함되어 있는지 여부를 반환

9) Set keySet()
> Map객체의 모든 key를 Set객체에 담아서 반환

10) Collection values()
> Map객체의 모든 value를 Collection객체에 담아서 반환

11) Set<Map.Entry<K, V>> entrySet()
> Map에 저장된 모든 Entry<K, V>를 Set에 담아서 반환


(2) HashMap 활용법

- HashMap<K, V> : 가장 많이 사용하는 Map 인터페이스 구현 클래스
public static void main(String[] args) {
	Map<Integer, String> map = new HashMap<Integer, String>();

	// HashMap객체에 Key, Value의 쌍으로 데이터 저장하기
	map.put(10, "홍길동");
	map.put(20, "류관순");
	map.put(30, "이순신");

	// HashMap객체에 저장된 데이터를 Key를 이용해서 조회하기
	String value1 = map.get(10); // 홍길동이 조회됨
	String value2 = map.get(30); // 이순신 조회됨
	String value3 = map.get(50); // null이 반환됨

	// HashMap객체에 지정된 Key값이 존재하는지 확인하기
	boolean result1 = map.containsKey(20); // true가 반환됨

	// HashMap객체에 저장된 Key, Value 쌍의 갯수 조회하기
	int count = map.size(); // 3이 조회됨

	// HashMap객체에서 지정된 Key값으로 저장된 데이터 삭제하기
	map.remove(30); // 30, "이순신"의 Key, Value쌍의 데이터가 삭제됨

	// HashMap객체가 비어있는지 확인하기
	boolean result2 = map.isEmpty(); // false가 반환됨

	// HashMap객체에 저장된 모든 Entry객체 조회하기
	Set<Entry<Integer, String>> entries = map.entrySet();
	for (Entry<Integer, String> entry : entries) {
		int key = entry.getKey(); // Key값이 반환됨
		String value = entry.getValue(); // Value값이 반환됨
		System.out.println(key + " : " + value);
	}
}




5. Iterator

- 자료구조내의 각 요소를 순회하는 반복자 객체의 표준 인터페이스

- 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화함
-> List, Set, Map 동일한 코드로 읽어오기 가능

- 컬렉션에 iterator()를 호출해서 iterator를 구현한 객체를 얻어서 사용
*Map에는 iterator()가 없음 - keySet(), entrySet(), values()를 호출하여 사용

참고)
 * Enumeration : Iterator의 구버전
 * ListIterator : Iterator의 접근성을 향상시킨 것 (단방향 -> 양방향)

(1) Iterator 주요 메소드

1) boolean hasNext()
> 반복할 요소가 남아있으면 true 반환

2) E next()
> 현재 반복대상이 되는 요소를 꺼냄

3) void remove()
> 현재 반복대상이 되는 요소 삭제


(2) Iterator 사용예시

1) ArrayList - iterator()

ArrayList<String> list = new ArrayList<>();
list.add("홍길동");
list.add("류관순");
list.add("이순신");

// 향상된 for문으로 ArrayList에 저장된 요소를 반복해서 조회하기
for (String name : names) {
	System.out.println(name);
}

// Iterator의 구현객체를 이용해서 ArrayList에 저장된 요소를 반복해서 조회하기
Iterator<String> it = list.iterator();
while (it.hasNext()) {
	String name = it.next();
	System.out.println(name);
}

2) HashSet - iterator()

HashSet<String> list = new HashSet<>();
list.add("홍길동");
list.add("류관순");
list.add("이순신");

// 향상된 for문으로 HashSet에 저장된 요소를 반복해서 조회하기
for (String name : names) {
	System.out.println(name);
}

// Iterator의 구현객체를 이용해서 HashSet에 저장된 요소를 반복해서 조회하기
Iterator<String> it = list.iterator();
while (it.hasNext()) {
	String name = it.next();
	System.out.println(name);

3) HashMap - iterator()

HashMap<String, String> map = new HashMap<>();
map.put("hong", "홍길동");
map.put("ryu", "류관순");
map.put("lee", "이순신");

Set<String> keySet = map.keySet();
// 맵에서 조회된 key의 집합에 저장된 key값을 반복해서 조회하기
for (String key : keySet) {
	System.out.println(key);
}

// Iterator의 구현객체를 이용해서 HashMap에 저장된 요소를 반복해서 조회하기
Iterator<String> it = keySet.iterator();
while (it.hasNext()) {
	String key = it.next();
	System.out.println(key);

* 자료구조객체에 저장된 데이터를 순회하면서 현재 반복대상이 되는 객체를 삭제해야 하는 경우에는 반드시 Iterator를 사용해야 한다.
- 이유 : 향상된 for문의 내부에서는 자료구조객체에 저장된 객체를 삭제할 수 없음




6. Comparable

- Comparable 인터페이스를 구현한 객체는 오름차순으로 정렬가능한 객체가 된다.
- Comparable의 compareTo메소드를 재정의해서 어떤 값을 기준으로 정렬할 것인지 구현 가능
- Comparable을 구현한 객체는 Arrays.sort(T[] array),
  Collections.sort(List list) 메소드를 이용해서 정렬이 가능

(1) Comparable 주요 메소드

1) int compareTo(T other)
> 반환값이 양의 정수 : 비교대상이 되는 other보다 큰 값을 가지는 객체
> 반환값이 0 : 비교대상이 되는 other와 같은 값을 가지는 객체
> 반환값이 음의 정수 : 비교대상이 되는 other보다 작은 값을 가지는 객체


(2) Comparable 사용예시

1) 번호를 기준으로 오름차순 정렬되도록 구현

public class Person implements Comparable<Person> {
	private int no;
	private String name;

	public int compareTo(Person other) {
		return this.no = other.no;
	}
}

2) 이름을 기준으로 오름차순 정렬되도록 구현

public class Person implements Comparable<Person> {
	private int no;
	private String name;

	public int compareTo(Person other) {
		return this.name.compareTo(other.name);
	}
}


 


< 해당 글은 velog에서 옮겨온 글로, 가독성이 좋지 않을 수 있는 점 양해 부탁드립니다. >

🔗 velog 버전 보기 : https://velog.io/@ryuneng2/Java-Collection-주요메소드