Java List Collection - ArrayList, LinkedList, Vector
예시 리스트
1. ArrayList : 가변적인 크기의 배열
- 동작 방식(삽입)
AL1
AL2
ex) 2번 자리의 추가
2번 자리의 추가를 한다면 맨 뒤 빈자리가 추가된다.
이후 2~4번의 앉아있던 사람이 한칸씩 뒤로 이동한다.
그리고 이동 후 빈자리의 새 값이 들어간다.
=> 삭제도 마찬가지의 과정을 거친다.
※ 따라서 ArrayList는 검색 속도는 빠르지만, 중간 삽입/삭제가 많다면 아주 비효율적이다.
2. LinkedList : ArrayList와 사용 방법 등 똑같지만 내부 동작 구조가 다르다.
- 동작 방식(삽입)
LL1
LL2
ex) 2번 자리에 추가
LinkedList는 내부 객체들끼리 링크로 연결되어 있다.
따라서 ArrayList처럼 자리이동 없이 이 링크만 끊어준 후 다른곳으로 연결만 해주면 된다.
※ 이처럼 ArrayList와 달리 중간에 삽입/삭제가 발생하여도 빠르게 할 수 있다. 하지만 링크를 타고 움직이므로 탐색은 느리다.
3. Vector : ArrayList와 사용 방법 등 똑같지만 스레드의 안전(Thread-Safe) 하다.
결과
결과
코드
package pk;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Vector;
public class Test {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<>();
Vector<String> v = new Vector<>();
LinkedList<String> ll = new LinkedList<String>();
System.out.println("- 객체 삽입 -");
al.add("a"); // a
al.add("c"); // a c
al.add("b"); // a c b
al.add("a"); // a c b a
al.add(2, "x"); // a c x b a
al.set(1, "y"); // a y x b a
System.out.print("값 확인 : ");
for(String s : al) System.out.print(s + ", ");
System.out.println("\n");
System.out.println("- 객체 검색 -");
if( !al.isEmpty() ) System.out.println("리스트가 비어있지 않습니다.");
System.out.println("개수 : " + al.size());
if( al.contains("a") ) System.out.println( "a가 있습니다." );
System.out.println("index 2의 객체 : " + al.get(2) + "\n");
System.out.println("- 객체 삭제 -");
System.out.print("index 2 삭제 : ");
al.remove(2); // a y b a
for(String s : al) System.out.print(s + ", ");
System.out.print("\na 찾아서 삭제 : ");
al.remove("a"); // y b a
for(String s : al) System.out.print(s + ", ");
System.out.print("\n 리스트 비우기 : ");
al.clear();
if( al.isEmpty() ) System.out.println("리스트가 비었습니다.");
}
}
List Collection 메소드들
boolean add(E e) : 맨 뒤에 객체 추가
void add(int index, E e) : 해당 인덱스의 객체 추가
E set(int index, E e) : 해당 인덱스 객체값 수정
boolean contain(Object o) : 해당 객체가 포함되어 있는지 여부
int size() : 저장된 객체 개수 리턴
E get(int index) : 해당 인덱스 값 가져오기
boolean isEmpty() : 비어있는지 검사
E remove(int index) : 해당 인덱스 객체 제거
boolean remove(Object o) : 인자로 받은 객체 제거 (앞에서부터 하나만)
void clear() : 리스트를 비움
'JAVA > 심화' 카테고리의 다른 글
Java HashSet 합집합, 차집합, 교집합, 부분집합 (0) | 2020.04.09 |
---|---|
Java HashSet - 집합 삽입, 삭제, 탐색 (0) | 2020.04.09 |
Java 제네릭(Generic) 타입 (0) | 2020.04.01 |
Java 시간 차 구하기 ChronoUnit (0) | 2020.03.28 |
Java 날짜와 시간 얻기 LocalDate, LocalTime (0) | 2020.03.27 |