자바 - List Interface

신범철·2022년 2월 11일
0

자바

목록 보기
8/20
post-custom-banner

List Interface

  • List Interface에서 지원하는 class
    - ArrayList
    - LinkedList
    - Vector
    - Stack

배열, 리스크 클래스 비교

공통점

  1. 동일한 특성의 데이터들을 묶는다.
  2. 반복문(loop)내에 변수를 이용하여 하나의 묶음 데이터들을 모두 접근할 수 있다.

차이점(배열 관점)

  1. 처음 선언한 배열의 크기(길이)는 변경할 수 없다. 이를 정적 할당(static allocation)이라고 한다.
  2. 메모리에 연속적으로 나열되어 할당된다.
  3. index에 위치한 하나의 데이터(element)를 삭제하더라도 해당 index에는 빈공간이 계속 남는다.

차이점(리스트 관점)

  1. 리스트의 길이 가변적이다. 이를 동적 할당(dynamic allocation)이라고 한다.
  2. 데이터들이 연속적으로 나열된다.(메모리에 연속적으로 나열되지 않고 각 데이터들의 주소(reference)로 연결되어 있다. c에서 포인터)
  3. 데이터(element) 사이에 빈 공간을 허용하지 않는다.

배열의 장단점

  • 장점
    - 데이터의 크기가 정해져있기 때문에 관리가 편함
    • 메모리에 연속적으로 할당되어 있기 때문에 index를 통한 access가 빠르다.
  • 단점
    - 배열의 크기를 변경할 수 없기 때문에 너무 크게하면 메모리가 낭비되고 너무 작게하면 오류가 발생할 수 있다.
    • 삽입, 삭제시 뒤의 데이터들을 모두 밀어내거나 당겨주어야 하기 때문에 속도가 느리다.

리스트의 장단점

  • 장점
    - 메모리를 동적할당하므로 관리가 편함
    • 데이터의 연결된 주소만 바꿔주면 되기 때문에 삽입, 삭제에 용이(ArrayList는 예외)
  • 단점
    - 객체로 데이터를 다루기 때문에 적은 양의 데이터만 쓸 경우 배열에 비해 차지하는 메모리가 커짐
    • ex) primitive type인 Int는 4byte를 차지하는 반면 Wrapper class인 Integer는 최소 16Byte를 차지한다. + 객체데이터 주소 연결
    • 검색 능력이 떨어짐

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

++자료구조를 만들자고 할 때, 인터페이스들은 같은 프로젝트 폴더안에 다른 package를 하나 만들어서 그 안에 모아놓는 것이 좋다.

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();
 
}

참고 문헌

list Interface 참고문헌

profile
https://github.com/beombu
post-custom-banner

0개의 댓글