[Java] Array vs. ArrayList vs. LinkedList

Jane·2021년 1월 12일
4
post-thumbnail

Array

선언

String[] weeks = new String[7];
weeks[0] = "Monday";

복제

int[] a = {1, 2, 3, 4, 5};
int[] b = a.clone();

출력

System.out.print("a =");
for (int i = 0; i < a.length; i++)
	System.out.print(" " + a[i]);

주의해야 할 오류

ArrayIndexOutOfBoundsException

ArrayList

  • List 인터페이스를 구현하기 위해 내부적으로 배열을 사용한다.
  • 최선의 경우 O(1)에 삽입할 수 있지만 미리 선언해 놓은 배열의 크기가 가득찰 경우 더 많은 수용량을 갖고있는 새로운 배열을 초기화한 뒤 원래 존재하던 모든 요소들을 새로운 배열로 복사해야 한다. 따라서 시간복잡도는 최악의 경우 O(n)이 된다.

add

ArrayList al = new ArrayList();
al.add("apple");
al.add(1, "banana"); // 2번째 위치에 원소 삽입

get

System.out.println(al.get(1));

size

System.out.println(al.size());

contains

  • 리스트 안에 값이 있으면 true, 아니면 false 반환
System.out.println(al.contains("apple"));

remove

  • remove(객체)
System.out.println(pitches.remove("apple"));
  • remove(인덱스)
System.out.println(al.remove(1));

LinkedList

  • element를 저장하고 되찾기 위해 연결된 노드의 집합을 사용한다.

  • index를 이용한 접근과 삭제에는 최소 O(1) 최대 O(n)의 시간이 소요된다.

  • 그러므로 LinkedList는 addition rate > read rate일 때 사용하면 좋다.

add

 LinkedList<String> ll=new LinkedList<String>();  
  ll.add("apple");  

addAll

ll.addAll(ll2);     // ll2 리스트의 모든 원소를 첫 번째 리스트에 추가
ll.addAll(1, ll3);  // 추가할 인덱스 지정
System.out.println("Updated list : "+ll);  

리스트 요소 반대로 출력하기

  LinkedList<String> ll=new LinkedList<String>();  
       ll.add("apple");  
       ll.add("banana");  
       ll.add("strawberry");  
   
       Iterator i=ll.descendingIterator();  
       while(i.hasNext())  
       {  
           System.out.println(i.next());  
       }  

Source

1개의 댓글