List
java.util
interface List<E> extends Collection<E>
- 구현 클래스
ArrayList, LinkedList, Vector
- index를 통한 접근 가능(순서 존재)
- 중복데이터 허용
methods
element 추가
add(E e) -> boolean
add(int idx, E e) -> void
addAll(Collection<E>) -> boolean
addAll(int idx, Collection<E>) -> boolean
element 수정
set(int idx, E e) -> E
replaceAll(UnaryOperator<E>) -> void
list.replaceAll(i -> i*i);
element 삭제
clear() -> void
remove(int idx) -> E
remove(Object o) -> boolean
removeAll(Collection<E>) -> boolean
removeIf(Predicate<E>) -> boolean
element에 접근하기
iterator() -> Iterator<E>
get(int idx) -> E
lambda를 받는 메서드
forEach(Consumer<E>) -> void
List<String> members = new ArrayList<>();
members.forEach(System.out::println);
일치하는 element 검사
indexOf(Object) -> int
lastIndexOf(Object) -> int
contains(Object) -> boolean
list 상태
isEmpty() -> boolean
size() -> int
: 저장된 Elements 수
sorting
- java8 부터 제공 과거 버전에서는
Collections.sort(list,comparator)
sort(Comparator.naturalOrder())
: 오름차순
sort(Comparator.reverseOrder())
: 내림차순
sort(String.CASE_INSENSITIVE_ORDER)
: 대소문자 구분없이 사전순
sort(Collections.reverseOrder(String.CASE_INSENSITIVE_ORDER))
: 대소문자 구분없이 사전순서 역순
size() -> int
: 크기
remove(Object) -> boolean
isEmpty() -> boolean
contains(Object) -> boolean
toArray() -> Object[]
sublist 추출하기
.subList(int from, int to) -> List
.listIterator() -> ListIterator<E>
.listIterator(int idx) -> ListIterator<E>
ArrayList
java.util
class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable
- 내부적으로 Array를 사용해 Contiguous 하게 데이터 저장(random access)
- 기본크기 10, 자동으로 용량 조절
- 중간 삽입, 삭제 비효율적
Constructor
ArrayList(int initialCapacity)
: 초기 용량 지정
ArrayList(Collection)
ArrayList()
Methods
.ensureCapacity(int minCapacity) -> void
.lastIndexOf(Object) -> int
.trimToSize() -> void
단점
장점
java.util.arrays.ArrayList
java.util.ArrayList
와 달리 크기 고정
Arrays.asList(T ... elements) -> List<T>
의 실제 타입
- iterator가
remove()
메서드를 지원하지 않음
LinkedList
class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, Serializable
- 데이터를 메모리상에 불연속적으로 저장(Node), 링크를 통해 연결
- Queue or Deque 자료구조를 구현할때 사용가능
Node
- LinkedList 내부의
private static class
로 존재
- 실제 요소 : item
- 다음 이전 요소에 대한 참조 : next, prev
private static class Node<E> {
E item;
Node<E> next;
Node<E> prev;
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
methods
offer(E) -> boolean
: add()와 동일, IllegalStateException 발생 없음
poll() -> E
: remove() 와 동일, NoSuchElementException 발생하는 대신 null 리턴
peek() -> E
: element() 와 동일, NoSuchElementExcpetion 발생하는 대신 null 리턴
단점
- link 정보를 추가로 저장
- Access Time 많이 소요(index 접근)
장점