TaBo
개척하는 기록
TaBo
전체 방문자
오늘
어제
  • 기록들 (63)
    • Programming (35)
      • Java (19)
      • Servlet&Jsp (4)
      • Spring (4)
      • SpringBoot (1)
      • 기타 (2)
      • BOJ (5)
    • CS (16)
      • 자료구조 (4)
      • 알고리즘 (4)
      • 운영체제 (5)
      • 기본 용어 (3)
    • Project (4)
      • [Spring] 게시판 (4)
    • 나에 대한 기록 (8)

블로그 메뉴

  • Github

인기 글

태그

  • 자바
  • 알고리즘
  • c++
  • java
  • 운영체제
  • 백준
  • 스프링 게시판
  • Spring 게시판
  • OS
  • spring

최근 글

티스토리

hELLO · Designed By 정상우.
TaBo

개척하는 기록

[Java] List Interface
Programming/Java

[Java] List Interface

2022. 10. 10. 21:24

※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요!

 

[ 1 ] List Interface

List Interface란 선형 자료구조로서 순서가 있는 데이터를 저장하기 위해 만들어진 인터페이스이다. 보통 같은 종류의 데이터를 저장할 때 int[] arr = new int[10] 와 같은 '배열'을 활용하지만, 이처럼 선언한 배열은 10개의 데이터만 저장할 수 있다. 만약 할당된 범위를 넘어설 경우 IndexOutofBoundsException 에러가 발생한다.

 

List interface 는 '동적 크기'를 가지므로 배열의 단점을 보완할 수 있고, '중복을 허용'하고 '저장순서가 유지'된다는 특징도 있다.

 

List interface 의 대표적인 메소드는 다음과 같다.

 

메소드 설명
boolean add(Object o) List에 요소를 추가한다.
boolean remove(Object o) 지정한 객체와 같은 첫 번째 객체를 삭제한다.
boolean contains(Object o) 지정한 객체가 List에 있는지 확인한다. 있다면 true, 없다면 false를 반환한다.
int size() 현재 List에 있는 요소 개수를 반환한다.
Object get(int index) 지정한 인덱스에 저장된 요소를 반환한다.
Object set(int index, Object e) 지정한 인덱스에 있는 요소를 지정된 요소로 바꾼다.
boolean isEmpty() 현재 List에 요소가 없다면 true, 있다면 false를 반환
int indexOf(Object o) 지정된 객체가 있는 첫 번째 요소의 위치를 반환한다. 없다면 -1을 반환한다.
void clear() 모든 요소들을 제거한다.

 


[ 2 ] 구조

List Interface의 상속 구조는 다음과 같다.

 

출처 - https://catsbi.oopy.io/8f0f5192-3a06-405e-8076-dbc5ff9f2dfb

 

[ 2 - 1 ] ArrayList

  • Object[] 배열을 사용하기 때문에 흔히 사용하는 배열(int[])과 유사한 형태이다. 
  • 그러므로 인덱스를 활용한 리스트 요소 접근에는 좋은 성능을 보인다.
  • 하지만, 배열의 중간에 요소를 삽입-삭제할 경우 그 뒤의 모든 요소들을 뒤로 오른쪽으로 밀거나 왼쪽으로 당겨야 하기 때문에 삽입-삭제에서는 비효율적이다.
  • 리스트에 요소를 추가할 공간이 부족하면 더 큰 배열을 생성해 기존의 내용을 복사하는 과정을 거친다.

 

[ 2 - 2 ] LinkedList

  • 배열의 중간에 요소를 삽입-삭제할 때의 비효율성, 공간 부족할 때 더 큰 배열을 생성해야 하는 비효율성을 해결하기 위해 LinkedList를 고안했다.
  • LinkedList는 데이터와 주소로 이루어진 클래스(Node)를 만들어 서로 연결하는 방식으로 리스트를 생성한다.
  • 그러므로 특정 요소를 삽입-삭제할 때 해당 요소의 Node를 다른 Node와 연결하거나 끊기만 하면 되므로 ArrayList 보다 효율적이다.
  • 하지만, 특정 요소를 검색할 경우 리스트의 첫 Node부터 찾으려는 Node가 나올 때까지 연결된 Node를 모두 방문해야 하므로 비효율적이다.
  • Queue인터페이스와 Deque인터페이스를 구현한다.

 

[ 2 - 3 ] Vector

  • JCF가 도입되기 전부터 Java가 지원하던 클래스이다.
  • Object[] 배열을 사용하므로 ArrayList 와 유사하다.
  • 여러 쓰레드가 동시에 데이터에 접근할 경우 순차적으로 이를 처리하는 '동기화'를 지원한다. 그러므로 멀티 쓰레드에서 안전하지만, 단일 쓰레드에서도 동기화를 하기 때문에 ArrayList에 비해 성능이 좋지 않다.

 

객체 생성 방법은 다음과 같다.

 

// 방법 1
ArrayList<T> al = new ArrayList<T>();
LinkedList<T> ll = new LinkedList<T>();
Vector<T> vc = new Vector<T>();

// 방법 2
List<T> al = new ArrayList<T>();
List<T> ll = new LinkedList<T>();
List<T> vc = new Vector<T>();

 

다형성으로 인해 방법 2도 가능하다. 만약 List의 종류를 중간에 바꿔야 한다면 List<T>로 선언하자.

 

 


[ 참고자료 ]

https://catsbi.oopy.io/8f0f5192-3a06-405e-8076-dbc5ff9f2dfb

 

컬렉션 프레임워크

목차

catsbi.oopy.io

https://st-lab.tistory.com/142

 

자바 [JAVA] - 자바 컬렉션 프레임워크 (Java Collections Framework)

아마 프로그래밍을 전공한다면 '자료구조'라는 단어를 들어본 적이 있을 것이다. 자료구조는 Data Structure라고 하는데, 직역하면 데이터 구조. 좀 더 자세하게 설명하자면 '일련의 일정 타입들의

st-lab.tistory.com

저작자표시 비영리 변경금지 (새창열림)

'Programming > Java' 카테고리의 다른 글

[Java] 클래스, 객체, 인스턴스의 차이 및 객체 배열  (0) 2023.02.17
[Java] JVM, Java 환경변수 설정(Mac, 기본 zsh 쉘)  (5) 2023.01.18
[Java] 컬렉션 프레임워크  (1) 2022.10.03
[Java] length, length(), size() 차이  (1) 2022.10.02
[Java] Enum 클래스  (1) 2022.08.29
    'Programming/Java' 카테고리의 다른 글
    • [Java] 클래스, 객체, 인스턴스의 차이 및 객체 배열
    • [Java] JVM, Java 환경변수 설정(Mac, 기본 zsh 쉘)
    • [Java] 컬렉션 프레임워크
    • [Java] length, length(), size() 차이
    TaBo
    TaBo

    티스토리툴바