List <E> 구현 클래스

5BRack·2022년 7월 6일

자바란?

목록 보기
33/42

ArrayList <E> 구현 클래스

ArrayList : List를 인덱스 저장방식으로 구현한 자료구조 방식

  • 대표적인 List<E> 구현 클래스로, List<E>가 지니고 있는 대표적인 특징을 가지고 있다.
  • 데이터를 인덱스로 관리.
  • 저장공간을 동적으로 관리.

생성방법

  • 기본 생성자로 ArrayList 객체 생성시, 10개의 객체를 저장할 수 있는 초기용량을 가지게 된다.
List<E> list = new ArrayList<E>();

List<E> list = new ArrayList<E>(20); //capacity = 20
  • ArrayList에서 객체를 추가시, 0번인덱스부터 차례대로 객체를 제거
  • ArrayList에서 객체를 삭제시, 삭제된 인덱스뒤에서부터 마지막 인덱스까지 차례대로 1씩당겨진다.
  • ArrayList에서 객체를 삽입시, 삽입된 인덱스뒤에서부터 마지막 인덱스까지 차례대로 1씩밀려난다.

데이터 처리메서드

  • add() - 데이터 추가
 ArrayList 참조변수명.add(2)  //2가 추가 기존값들은 뒤로 1인덱스씩 밀려남
  • set() - 데이터 수정
 ArrayList 참조변수명.set(1,4)  //인덱스 1위치에 데이터를 4로 수정
  • remove() - 데이터 삭제

💡 객체수가 많을시, 인덱스 조정이 많으므로 LinkedList 사용이 유리 but 인덱스를 이용하여 검색을 하거나 마지막에 객체 추가시에는 ArrayList가 더 좋은 성능을 발휘

 ArrayList 참조변수명.remove()  //인덱스 1위치에 데이터를 삭제

Arrays.asList()메서드를 이용해 정적 컬렉션 객체 생성

  • List 객체를 생성하는 또다른 방법은 Arrays 클래스의 asList(T…) 정적 메서드를 사용하는 것이다. 내부적으로 배열을 먼저 생성하고 이를 List로 래핑 , 즉 포장만 해놓은 것이다. 따라서 내부 구조는 배열과 동일하므로 컬렉션 객체인데도 저장 공간의 크기를 변경할 수 없다.
  • 추가 삭제는 불가능 하지만, 변경(set)은 가능하다.
List<Integer> aList1 = Arrays.asList(1,2,3,4);
aList1.set(1,7); //인덱스 1 위치에 Integer 데이터 7 update
aList.add(5) //error - UnsupportedOperationException
aList.remove(0) // error - UnsupportedOperationException

Vector <E> 구현 클래스

Vector : List + 메서드 동기화로 표현되는 자료구조방식

  • Vector는 ArrayList와 동일한 내부구조를 가진다.

Vector 생성방법

List<E> list = new Vector<E>();
List<E> list = new Vector<>(); //왼쪽 List에 저장된 타입을 따라감

특징

  • ArrayList 와 다른점은 Vector는 동기화된 메소드로 구성되어 있기 때문에 멀티쓰레드가 동시에 Vector의 메서드를 실행할 수 없고, 하나의 메서드의 실행이 완료되어야만 다음 쓰레드가 메서드를 실행할 수 있다.

Board 객체를 저장하는 Vector

 public class VectorExample{
  public static void main(String[] args){
    List<Board> list = new Vector<Board>();
    list.add(new Board("제목","내용1","글쓴이"));

    list.remove(2);
  }
}

LinkedList <E> 구현 클래스

LinkedList : List 저장방식을 앞뒤 객체의 정보로 저장한 자료구조방식

  • List<E>의 공통적인 특징(동일 타입 수집,메모리 동적 할당, 데이터 추가/변경/삭제 메서드)를 모두 지니고 있다.
  • 메서드를 동기화하고 있지 않기 때문에 싱글 스레드에서 사용하기 적합하다.
  • LinkedList는 저장 용량을 매개변수로 갖는 생성자가 없기 때문에 객체를 생성할 때 저장 용량을 지정할 수 없다.
  • LinkedList는 인덱스를 갖지 않고 앞뒤 객체의 정보를 저장한다.

생성방법

 List<Integer> linkedList1 = new LinkedList<Integer>();

ArrayList와 LinkedList의 성능차이

  • 정리 하자면 추가 또는 삭제시, LinkedList의 속도가 빠를것이며, 데이터를 검색시에는 ArrayList의 속도가 빠를것이다.

0개의 댓글