List는 자바의 자료형 중 하나이다. 배열과 비슷하지만 명확한 차이점이 있다.
1. 크기를 자유롭게 설정 가능
- 배열은 처음 크기를 설정하고 나서부터는 크기 설정이 불가능하지만 리스트는 삽입과 삭제로 원하는대로 크기를 변경할 수 있다.
2. 배열은 직접 액세스(Direct access), 순차 액세스(Sequential Access) 모두 가능 | List는 순차 액세스만 가능
직접 액세스(Direct Access)는 배열의 값으로 바로 접근하는 것을 말하고
순차 액세스는(Sequential Access)는 처음부터 시작해 배열의 특정 값까지 접근하는 것을 말한다.
당연히 직접 액세스가 훨씬 더 빠르게 접근할 수 있기 때문에 배열 안에 값을 넣거나 가져올 때는 Array가 List보다 더 빠르다.
정리해보면
List는 삽입, 삭제를 통해 크기를 자유롭게 변경 가능하고 순차 액세스만 가능하기 때문에 배열보다는 좀 느리다.
다만 배열은 크기를 변경할 수 없기 때문에 예기치 못한 상황에 대처하기 매우 힘든데
List는 동적으로 크기를 변경할 수 있기 때문에 그 점에 있어서는 배열보다 훨씬 유리하다.
다음으로 List의 메소드들을 알아보자.
List 선언 (ArrayList, LinkedList)
ArrayList<데이터형> 리스트명 = new ArrayList<데이터형>();
ArrayList와 LinkedList 두 유형으로 선언이 가능한데
ArrayList는 대량의 데이터 검색에 LinkedList는 대량의 데이터 삽입, 삭제에 유리하다
ArrayList는 값을 가져오는 get() 메소드를 수행 시 LinekdList보다 훨씬 빠르며
LinkedList는 값을 추가하거나 삭제하는 add(), remove() 메소드 수행 시 ArrayList보다 훨씬 빠르다.
이유를 알아보면,
ArrayList는 배열과 같은 구조기 때문에 특정 값을 가져올 때에는 배열을 쭉 지나가면 되므로 매우 빠르다.
반면 값을 추가하거나 삭제할 때에는 특정 값을 지우고 뒤의 값을 모두 한칸씩 땡겨오거나
특정 값을 추가하고 뒤의 값을 모두 한칸씩 미는 식으로 진행하기 때문에 대량의 추가/삭제에 있어서 매우 느리다
LinkedList는 내 전 배열 인덱스의 값과 다음 배열 인덱스의 값만 알고있기 때문에
추가 삭제시에는 ArrayList보다 훨씬 빠르다.
다만 이렇게 하나하나 찾아가는 구조기 때문에 대량검색 시에는 ArrayList보다 훨씬 느리다
결론으로 돌아가보자면
ArrayList는 검색이 LinkedList보다 훨씬 빠르므로 대량의 데이터를 넣어놓고 검색할 때 주로 사용한다.
LinkedList는 삽입, 삭제가 ArrayList보다 훨씬 빠르므로 대량의 데이터를 삽입, 삭제할 때 주로 사용한다.
List 추가
리스트명.add("값")
List 삭제
리스트명.remove("값");
리스트명.remove(인덱스)
List 값 변경
리스트명.set(인덱스, "바꿀값");
List 크기 확인
리스트명.size();
List에 특정 값 들었는지 확인
리스트명.contains("값");
List가 비었는지 확인
리스트명.isEmpty();
List 안에 List, Set, 배열 전체 더하기
리스트명.addAll(다른컬렉션명(List, Set..));
- 배열도 합쳐줄 수 있음
리스트명.addAll(Arrays.asList(배열명)); -- 배열의 경우
코드를 통해 확인해보고 싶다면
아래 코드블록을 참조해주면 된다
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>(); // List 선언(ArrayList)
LinkedList<String> list2 = new LinkedList<String>(); // List 선언(LinkedList)
list2.add("E");
list.add("A");
list.add("B");
list.add("C"); // List 추가
list.add(0, "D"); // 0번째에 D값을 추가(동일한 값이 있을 경우 밀어냄)
System.out.println("List 값 확인 : " + list);
System.out.println("List 인덱스 값 확인 : " + list.get(0));
list.remove(2); // List 삭제(인덱스)
list.remove("B"); // List 삭제(값으로)
list.set(0, "Z"); // List 값 변경 (인덱스, "변경할 값")
System.out.println("List 크기 확인 : " + list.size());
System.out.println("List 안에 특정 값 들었는지 확인 : " + list.contains("B"));
System.out.println("List 안에 아무것도 들지 않았는지 확인 : " + list.isEmpty());
list.addAll(list2); // 리스트에 다른 리스트 더하기
String[] arr = {"ARRAY"};
list.addAll(Arrays.asList(arr)); // 배열을 리스트로 더하기
System.out.println("List 안에 다른 리스트 더하기 : " + list);
}
'공부 STUDY > JAVA' 카테고리의 다른 글
[JAVA] 자료구조 - Map (0) | 2023.01.15 |
---|---|
[JAVA] 자료구조 - Set | Hashset (0) | 2023.01.15 |
[JAVA] 제네릭 Generic (0) | 2023.01.15 |
[JAVA] java.util패키지 | 컬렉션 프레임워크(Collection Framework) (0) | 2023.01.15 |
[JAVA] StringBufffer, StringBuilder 사용법 & 차이점이 뭘까? (0) | 2023.01.15 |