# 목적
: 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-주요메소드
'BackEnd > Java' 카테고리의 다른 글
[Java] I/O - 자바의 입출력 (0) | 2025.01.16 |
---|---|
[Java] 예외(Exception)와 예외처리 (0) | 2025.01.16 |
[Java] 컬렉션 프레임워크(Collection Framework) 개념 (0) | 2025.01.15 |
[Java] StringBuilder, StringBuffer 사용 목적 및 차이점 (0) | 2025.01.15 |
[Java] 추상화 - 추상 클래스(Abstract Class), 인터페이스(Interface) 정리 (0) | 2025.01.15 |