Collections - List(ArrayList, LinkedList)

apayaya·2022년 4월 11일
0

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<>();
// lambda
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() -> 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 접근)

장점

  • 빈번한 삭제, 추가에 효율적
profile
java 정리

0개의 댓글