1. Collection 인터페이스란?
* 데이터를 모아서 저장하고 관리하는 자료구조 컬렉션 인터페이스는 자바에서 컬렉션을 다루기 위해 제공되는 인터페이스들의 모음 * 컬렉션을 다루기 위한다는 것은 자바에서 데이터의 저장, 추가, 삭제, 검색, 정렬 등과 같은 작업을 수행하기 위해 컬렉션 인터페이스를 사용한다는 의미
여러 개의 데이터를 효율적으로 다루기 위해 제공되는 클래스들의 집합 컬렉션은 배열과 비슷한 역할을 하지만, 배열과는 다르게 크기를 동적으로 조정할 수 있고, 다양한 기능과 메소드를 제공하여 데이터의 추가, 삭제, 검색 등을 편리하게 처리할 수 있다. 일반적으로 배열(Array), 리스트(List), 집합(Set), 맵(Map) 등의 형태로 사용된다.
배열 잘 안쓰고 Collection을 많이 쓴다
Collection은 여러 가지 데이터 타입을 포함할 수 있음
[ 컬렉션의 종류 ]
//붉은색 < > 표시된 건 알아야함. +Vector도 컬렉션 클래스
// Map의 경우 Collection 인터페이스를 상속 받고 있지 않지만 Collection으로 분류된다.
[ 2. List 인터페이스의 대표 클래스 ]
2. ArrayList ★
ArrayList 1차 설명 링크 ArrayList는 List 인터페이스를 구현한 클래스다.
ArrayList는 List 인터페이스를 구현한 클래스니까, ArrayList<Integer> arr = new ArrayList(); 해당 코드를 List<Integer> arr = new ArrayList(); 로 작성 가능.
ArrayList는 List 인터페이스를 구현한 클래스이기 때문에
ArrayList에 제네릭 타입을 지정할 때 List의 제네릭 타입을 따라야 한다.
2-1. ArrayList 선언과 동시에 초기화
Arrays.asList(1, 2, 3) 해당 코드로 배열을 리스트 타입으로 변환해서 arr2에 할당 함
이렇게 값추가 가능O
2-2. Arrays.asList()
해당 코드를 아래와 같이 줄일 수 있다. (한 줄!)
* Arrays 클래스는 배열과 관련된 유용한 메서드들을 제공하는 클래스 * asList() 배열을 List로 변환해주는 정적(static) 메서드 - 값 추가, 삭제 안됨 * Arrays.asList()는 애초에 추가, 삭제 불가능하게 나온 애. * 값을 추가하고 싶으면 ArrayList<Integer> arr = new ArrayList<>(); 를 써라
asList 메서드는 Arrays 클래스인 것 확인,
3. Vector
Vector는 List 인터페이스를 구현한 클래스 Vector 클래스는 동적으로 크기가 조절되는 배열을 구현한 것으로, 배열과 유사한 방식으로 요소들을 저장하고 관리할 수 있다. 배열과 달리 크기가 가변적이며, 요소의 추가, 삭제, 검색 등 다양한 연산을 제공한다. 배열과 마찬가지로 인덱스를 사용하여 요소에 접근할 수 있다. 간단히 말하면, Vector는 크기가 조절될 수 있는 상자로서 물건을 추가하고 제거하며, 번호를 사용하여 물건을 찾을 수 있는 기능을 제공하는 것. 여러 사람이 함께 사용할 때에도 안전하게 사용할 수 있다.
Vector 클래스 또한 List 인터페이스를 구현한 클래스! List 인터페이스가 제공하는 다양한 메서드를 사용할 수 있다. ex) add() 추가, remove() 제거, get() 조회 등의 메서드 사용 가능
ArrayLlist와 Vector의 사용법… 비슷하죠?
하지만 둘의 주요한 차이점 중 하나는 동기화(synchronization) 유무
[초기화와 선언을 동시에]
Vector<Integer> vec2 = new Vector<>(Arrays.asList(1, 2, 3)); vec2.add(3); vec2.add(55); System.out.println(vec2);
3-1. Vector 예제
전체 코드
package ex13.example1; import java.util.Arrays; import java.util.Collections; import java.util.Vector; public class VectorExample1 { public static void main(String[] args) { Vector<String> vec = new Vector(); //이러면 제네릭 vec.add("Apple"); vec.add("Orange"); vec.add("Mango"); //크기 System.out.println(vec.size()); //인덱스 접근 System.out.println(vec.get(1)); //정렬 (오름차순) Collections.sort(vec); for (String s : vec) { System.out.print(s + " "); } System.out.println(); //정렬 (내림차순) Collections.sort(vec, Collections.reverseOrder()); for (String s : vec) { System.out.print(s + " "); } System.out.println(); // 정렬 다른 방법 // Arrays.sort(); // 삭제 String result = vec.remove(2); System.out.println(result); System.out.println(vec.size()); // 값 찾기 (현재 값이 오렌지, 망고만 남아있음) boolean search = vec.contains("mango"); //리턴 값이 boolean이니까! System.out.println(search); String a = "Mango"; boolean check = a.equalsIgnoreCase("mAngo"); System.out.println(check); } }
오름차순, 내림차순
Arrays.sort();
오버로딩이 전부 배열인것 확인. 애는 컬렉션 못씀. Arrays.sort() 메서드는 배열에 대해서만 작동하며, 컬렉션(Collection)을 직접 정렬하는 기능은 제공하지 않는다. 컬렉션을 정렬하기 위해서는 Collections.sort() 메서드를 사용해야 한다.
Collections.sort() 메서드는 List 인터페이스를 구현한 컬렉션 클래스들,
예를 들어 ArrayList나 LinkedList, Vector 등과 같은 클래스를 정렬할 수 있다.
+) return 값 확인.
return값 String 임!
삭제
인덱스 번호로 삭제하니, 어떤 데이터가 삭제됐는지 나옴 값 하나를 삭제했으니, 사이즈가 3 > 2로 바뀐 것 확인
contains + 대소문자 구분
이 메서드는 특정 요소가 컬렉션에 포함되어 있는지를 확인하는 역할 포함된 경우 > ture / 포함 안 된 경우 > False
[ 대소문자 구분 X ]
소문자로 작성하면 false로 나옴. contains 메소드는 대소문자 구분함!
만약 mango, Mango, mAngo, MANGO 이렇게 있으면 어떻게 찾음?ㅠㅠ 라고 챗 지피티한데 물어보면 알려준다
[ 대소문자 무시 equalsIgnoreCase ]
UpperCase 대문자
LowerCase 소문자
4. LinkedList
LinkedList 1차 설명 링크 LinkedList 클래스는 List 인터페이스를 구현한 컬렉션 클래스 중 하나 데이터를 연결 리스트(linked list) 형태로 저장한다. 각 요소는 이전 요소와 다음 요소(=데이터)를 가리키는 링크(link)를 가지고 있어 이 링크를 통해 순서를 유지하며 데이터에 접근이 가능하다. 데이터를 추가하거나 삭제할 때는 요소 간의 링크를 바꾸는 작업을 수행한다. 데이터를 추가할 때는 새로운 요소를 생성하고, 기존의 요소와 새로운 요소를 링크로 연결 데이터를 삭제할 때는 해당 요소의 링크를 변경하여 이전 노드와 다음 노드를 직접 연결 따라서, 풀스캔이나 데이터의 삽입과 삭제가 빈번한 경우에 유용하게 사용 가능 ArrayList와 달리 인덱스를 통한 접근이 상대적으로 느리지만, 삽입과 삭제가 빠르며 요소들 간의 연결 관계를 유지하기 때문에 특정 요소를 삽입하거나 삭제하는 작업에 효율적이다.
삽입, 삭제하는 작업이 많다면 LinkedList
위치적인 접근이 많다면 ArrayList
코드
package ex08; import java.util.LinkedList; public class Test09 { public static void main(String[] args) { LinkedList<String> list = new LinkedList<String>(); list.add("MILK"); list.add("BREAD"); list.add("BUTTER"); list.add(1, "APPLE"); //인덱스 1에 "APPLE"을 삽입 list.set(2, "GRAPE"); //인덱스 2의 원소를 "GRAPE"로 대체 list.remove(3); //인덱스 3의 원소를 삭제 for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i) + " "); } System.out.println(); list.stream().forEach(s -> System.out.print(s + " ")); } }
Share article