본문 바로가기
Programming/Algorithm&DataStructure

[JAVA 자료구조] List Interface (리스트 인터페이스)

by prinha 2021. 8. 4.
반응형

배열 vs List 인터페이스

공통점

1. 동일한 특성의 데이터타입을 묶는다.

2. 반목문내에 변수를 이용하여 하나의 묶음 데이터들을 모두 접근할 수 있다.

 

차이점 - 배열

1. 처음 선언한 배열의 크기는 변경할 수 없다. 정적 할당(static allocation)

2. 메모리에 연속적으로 나열되어 할당된다.

3. 인덱스에 위치한 하나의 데이터를 삭제하더라도 해당 인덱스는 빈공간으로 남는다.

 

차이점 - 리스트

1. 리스트의 길이가 가변적이다. 동적 할당(dynamic allocation)

2. 데이터들이 연속적으로 나열된다. (메모리에 연속적으로 나열되지않고 데이터들은 주소로 연결되어있음. ex.C의 포인터)

3. 데이터 사이에 빈 공간을 허용하지 않는다.

 

<배열>

장점

1. 데이터의 크기가 정해져있을 경우 메모리 관리가 편리하다.

2. 메모리에 연속적으로 나열되어 할당되기때문에 인덱스를 통한 접근 속도가 빠르다.

 

단점

1. 배열의 크기를 변경할 수 없기 때문에 초기에 너무 큰 크기로 설정해주었을 경우 메모리 낭비가 심해지고, 너무 작은 크기로 설정해주었을 경우 데이터를 모두 담을 수 없어진다.

2. 빈 공간을 허용하지 않고 데이터를 삽입, 삭제 하고자한다면, 뒤에 데이터들을 모두 밀어내거나 당겨주어야한다. 이로 인해 속도가 느려 삽입, 삭제가 빈번할 경우에는 유용하지 않다.

 

<리스트>

장점

1. 데이터의 개수에 따라 해당 개수만큼 메모리를 동적 할당해주기때문에 메모리 관리가 편리하다.

2. 빈 공간을 허용하지 않기때문에 데이터 관리 또한 편리하다.

3. 주소로 데이터들이 연결되어 있기 때문에 연결된 주소만 바꿔주어도 삽입, 삭제에 용이하다. (ArrayList 제외)

 

단점

1. 객체로 데이터를 다루기 때문에 적은 양의 데이터만 쓸 경우 배열에 비해 메모리 소모가 많다.

2. 기본적으로 주소를 기반으로 구성되어있고 메모리에 순차적으로 할당하는 것이 아니기때문에 검색 능력이 떨어진다.


 

List Interface에 선언된 대표적인 메소드

 

  • void add(int index, Object element) : 지정된 위치(index)에 객체(element)를 추가
  • boolean addAll(int index, Collection c) : 지정된 위치(index)에 컬렉션에 포함된 객체들을 추가
  • Object get(int index) : 지정된 위치(index)에 있는 객체를 반환
  • int indexOf(Object o) : 지정된 객체의 위치(index)를 반환 (List의 첫 번째 요소부터 순방향으로 찾음)
  • int lastIndexOf(Object o) : 지정된 객체의 위치(index)를 반환 (List의 마지막 요소부터 역방향으로 찾음)
  • ListIterator listIterator(), ListIterator listIterator(int index) : List의 객체에 접근할 수 있는 ListIterator를 반환
  • Object remove(int index) : 지정된 위치(index)에 있는 객체를 삭제하고 삭제된 객체를 반환
  • Object set(int index, Object element) : 지정된 위치(index)에 객체(element)를 저장
  • void sort(Comparator c) : 지정된 비교자(comparator)로 List 정렬
  • List subList(int fromIndex, int tolndex) : 지정된 범위(fromIndex부터 tolndex)에 있는 객체 반환

 

package Interface_form;
 
/**
 * 
 * 자바 List Interface입니다. <br>
 * List는 ArrayList, SinglyLinkedList, DoublyLinked에 의해 각각 구현됩니다.
 * 
 * @author st_lab
 * @param <E> the type of elements in this list
 *
 * @version 1.0
 * 
 */
 
public interface List<E> {
 
	/**
	 * 리스트에 요소를 추가합니다.
	 * 
	 * @param value 리스트에 추가할 요소
	 * @return 리스트에서 중복을 허용하지 않을 경우에 리스트에 이미 중복되는 
	 *         요소가 있을 경우 {@code false}를 반환하고, 중복되는 원소가
	 *         없을경우 {@code true}를 반환
	 */
	boolean add(E value);
 
	/**
	 * 리스트에 요소를 특정 위치에 추가합니다. 
	 * 특정 위치 및 이후의 요소들은 한 칸씩 뒤로 밀립니다.
	 * 
	 * @param index 리스트에 요소를 추가할 특정 위치 변수
	 * @param value 리스트에 추가할 요소
	 */
	void add(int index, E value);
 
	/**
	 * 리스트의 index 위치에 있는 요소를 삭제합니다.
	 * 
	 * @param index 리스트에서 삭제 할 위치 변수
	 * @return 삭제된 요소를 반환
	 */
	E remove(int index);
 
	/**
	 * 리스트에서 특정 요소를 삭제합니다. 동일한 요소가 
	 * 여러 개일 경우 가장 처음 발견한 요소만 삭제됩니다.
	 * 
	 * @param value 리스트에서 삭제할 요소
	 * @return 리스트에 삭제할 요소가 없거나 삭제에 실패할 
	 *         경우 {@code false}를 반환하고 삭제에 성공할 경우 {@code true}를 반환 
	 */
	boolean remove(Object value);
 
	/**
	 * 리스트에 있는 특정 위치의 요소를 반환합니다.
	 * 
	 * @param index 리스트에 접근할 위치 변수 
	 * @return 리스트의 index 위치에 있는 요소 반환 
	 */
	E get(int index);
 
	/**
	 * 리스트에서 특정 위치에 있는 요소를 새 요소로 대체합니다.
	 * 
	 * @param index 리스트에 접근할 위치 변수 
	 * @param value 새로 대체할 요소 변수 
	 */
	void set(int index, E value);
 
	/**
	 * 리스트에 특정 요소가 리스트에 있는지 여부를 확인합니다.
	 * 
	 * @param value 리스트에서 찾을 특정 요소 변수 
	 * @return 리스트에 특정 요소가 존재할 경우 {@code true}, 존재하지 않을 경우 {@code false}를 반환  
	 */
	boolean contains(Object value);
 
	/**
	 * 리스트에 특정 요소가 몇 번째 위치에 있는지를 반환합니다.
	 * 
	 * @param value 리스트에서 위치를 찾을 요소 변수  
	 * @return 리스트에서 처음으로 요소와 일치하는 위치를 반환.
	 *         만약 일치하는 요소가 없을경우 -1 을 반환 
	 */
	int indexOf(Object value);
 
	/**
	 * 리스트에 있는 요소의 개수를 반환합니다.
	 * 
	 * @return 리스트에 있는 요소 개수를 반환  
	 */
	int size();
 
	/**
	 * 리스트에 요소가 비어있는지를 반환합니다.
	 * @return 리스트에 요소가 없을경우 {@code true}, 요소가 있을경우 {@code false}를 반환 
	 */
	boolean isEmpty();
 
	/**
	 * 리스트에 있는 요소를 모두 삭제합니다.
	 */
	public void clear();
 
}

 

 


https://prinha.tistory.com/entry/JAVA%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%9E%90%EB%B0%94-%EC%BB%AC%EB%A0%89%EC%85%98-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%ACjava-collection-framework

 

[JAVA/자료구조] 자바 컬렉션 프레임워크(java collection framework) 총정리

- 컬렉션(collection) : 여러 객체(데이터)를 담을 수 있는 자료구조, 다수의 데이터 그룹 - 프레임워크(framework) : 표준화, 정형화된 체계적인 프로그래밍 방식 ▶ 컬렉션 프레임워크(collection framework)

prinha.tistory.com

 

출처 및 참고

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

반응형