Collection / List / ArrayList

HH_Nebula·2022년 9월 1일
0

Collection / Generic

목록 보기
2/7

Collection

메모리상에서 자료를 구조적으로 처리하는 방법을 자료구조 라 한다.
컬렉션은 자바에서 제공하는 자료구조를 담당하는 프레임워크이다.

프레임 워크란?
자동차의 뼈대와 같은 것으로 이미 정형화 된 뼈대를 가져다 내용을 채워넣어 구현한다.

추가, 삭제, 정렬 등의 기능처리가 간단하게 해결되어 자료 구조적 알고리즘을 구현할 필요가 없다.

배열의 문제점

  • 한번 크기를 지정하면 변경할 수 없다.
    필요에 따라 공간을 늘리거나 줄일 수 없음
    공간 크기가 부족하면 에러가 발생
    배열 선언 시 넉넉한 크기를 선언할 경우 메모리 낭비

  • 기록된 데이터에 대한 중간 위치의 추가, 삭제가 불편하다.
    추가, 삭제할 데이터부터 마지막 기록된 데이터까지,
    하나씩 뒤로 밀어내고 추가하거나 삭제 후 당겨야한다. ( 복잡한 알고리즘 )

  • 한 타입의 데이터만 저장이 가능하다.

컬렉션의 장점

  • 저장하는 크기의 제약이 없다.
    저장하려는 데이터의 양 만큼 자동으로 늘어나고 줄어든다.

  • 추가, 삭제, 정렬 등의 기능 처리가 간단하다.
    자료를 구조적으로 처리하는 자료구조가 내장되어 있어 알고리즘 구현이 필요없다.

  • 여러 타입의 데이터 저장이 가능하다.
    객체만 저장할 수 있기 때문에 필요에 따라 기본 자료형을 저장하는 경우 Wapper 클래스를 사용한다.
    ( Ex. int 대신 Integer, double 대신 Double )

List

컬렉션 프레임워크의 주요 인터페이스 중 하나인 ListArray 의 상위 버전이라 할 수 있다.

List 특징
자료들을 순차적으로 나열한 자료구조로 인덱스로 관리되며, 중복해서 객체를 저장할 수 있으며 List 인터페이스를 구현한 클래스로 ArrayListVector , LinkedList 가 있다.


List 주요 메서드

객체 추가 메서드기능
boolean add(element)주어진 객체를 리스트의 멘 뒤에 추가
void add(index, element)주어진 index에 객체를 추가
boolean addAll(Collection)주어진 컬렉션 타입을 객체 리스트에 추가
E set(index, element)주어진 인덱스에 저장된 객체를 주어진 객체로 바꿈(replace)

객체 검색 메서드기능
boolean contains(Object)주어진 객체가 저장되어 있는지 검색
E get(index)주어진 인덱스에 저장된 객체를 반환
Iterator<E> iterator()저장된 객체를 한번씩 가져오는 반복자 리턴
boolean isEmpty()컬렉션이 비어있는지 검사
int size()저장되어 있는 객체의 수 반환

객체 삭제 메서드기능
void clear()저장된 모든 객체를 삭제
E remove(index)주어진 인덱스에 저장된 객체 삭제
boolean remove(Object)주어진 객체 삭제

위 메서드들은 Liat 계열의 클래스에서 공통적인 기능으로 사용이 가능하며 일부 메서드들은 다른 유형의 컬렉션에도 사용이 가능하다.

ArrayList - 가변배열

List 의 후손으로 초기 저장용량은 10으로 자동으로 설정된다.
일반적인 배열과 마찬가지로 인덱스로 객체를 관리한다.
배열을 생성 시 크기가 고정되지만 ArrayList 는 저장 공간이 부족할 경우 자동으로 용량을 늘린다.

ArrayList 생성

List<Type> list = new ArrayList<Type>();
// 기본형 타입은 Warrper 클래스로 작성

ArrayList 예제

import java.util.ArrayList;
import java.util.List;

public class TestArrayList {
	
	public static void main(String[] args) {
		
		List<String> list = new ArrayList<String>();
		
		list.add("Java");
		list.add("Eclipse");
		list.add("Oracle");
		
		// 리스트 출력 - 입력 순서대로 출력됨
		System.out.println(list); // [Java, Eclipse, Oracle]
		
		list.set(0, "Java 11"); // 0번 인덱스를 Java 11 로 변경
		list.add(1, "JDK"); // 1번 인덱스에 추가
		list.remove(2); // 2번 인덱스 삭제 
		list.remove("Oracle"); // Oracle 객체 삭제
		
		// 변경된 리스트 출력
		System.out.println(list); // [Java 11, JDK]
		
		list.clear(); // 리스트 전체 삭제
		System.out.println("빈 리스트 ? " + list.isEmpty()); // 비어있는지 검사 // 빈 리스트 ? true
		
	}

}
profile
공부하고 기록하고 복습하고

0개의 댓글