본문 바로가기
Java

[Java] 컬렉션? 종류와 특징, ArrayList와 반복문을 통해 출력하기

by 나는 개발자 2021. 1. 28.
TIL: 스스로 이해한 것을 바탕으로 정리하였기에 오류가 있을 수 있습니다. 틀린 부분은 댓글로 알려주시면 감사하겠습니다.

 

 

 

컬렉션

자료구조가 내장되어있는 클래스

자바에서 제공하는 자료구조를 담당하는 "프레임워크"이다.

 

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

java.util 패키지에 포함되어 있다.

 

*자료구조? 데이터를 메모리에서 구조적으로 처리하는 방법론

 

 

 

 

배열 말고 컬렉션을 사용하는 이유?

배열 

컬렉션

배열의 크기:
처음 크기지정이 필수며, 한번 지정된 크기는 변경불가하다.

애초에 크기를 크게 할당하면? => 메모리 낭비

크기를 꼭 지정할 필요없고 (해도 상관은 없음) 또한 크기가 알아서 늘어난다 -> 크기에 제약이없음

배열의 중간 위치에 새로운 데이터를 추가하거나 삭제하는 경우 당겨주거나 늘려주는 작업을 하나씩 코드로써 구현해야 된다. 

중간에 값을 추가하거나 삭제하는 경우, 알고리즘을 직접 구현할 필요 없다. 
이미 메서드로 정의되어있기 때문에 호출만 해주면 구현이 된다.

해당 자료형 한 가지 타입의 데이터들만 저장 가능 

여러 타입의 데이터를 저장할 수 있음 

(단, 객체 단위로만 저장 가능)

     ==>> 변동사항이 없다면 배열을 많이 쓴다.

     방대한 데이터들을 보관만 시켜서 조회할 용도로는 배열을 사용한다.

 ==>> 방대한 데이터들을 담고 새로운 데이터들이 추가되거나 삭제하는 일이 빈번한 경우 컬렉션을 사용한다.

 

     

 

 

 


     * 컬렉션 종류 (컬렉션의 주요 인터페이스)

     1. List 계열 
      구현 클래스 - *ArrayList/Vector(arraylist이전 버전)/LinkedList  
      -> 값을 담을 때 value값만 저장/ 순서유지 o / 중복 저장 가능

 


     2. Set 계열
      구현 클래스 - HashSet/TreeSet

      -> 값을 담을 때 value값만 저장/ 순서 유지 x / 중복된 데이터 저장 불가


     
     3. Map 계열 
      구현 클래스 - *HashMap/HashTable/TreeMap/ *Properties
      -> 값을 담을 때 Key+Value세트로 저장 / 순서 유지 x /
    

 

 

List

자료들을 순차적으로 나열한 자료구조로서 인덱스로 관리되며, 중복해서 객체 저장이 가능하다.

구현 클래스로 ArrayList와 Vector, LinkedList가 있다.

 

 

ArrayList컬렉션 표현법

ArrayList<제네릭> 컬렉션명 = new ArrayList(크기);

// 제네릭과 크기는 생략 가능

 

 

 

 

제네릭

-> 내가 제시한 타입의 객체만 저장하게끔 타입의 제한을  * 제네릭(<>)을 제시하는 이유
 * 1. 내가 제시한 타입의 객체만 저장하게끔 타입의 제한을 두기 위해서 
 * 2. 컬렉션에 저장된 객체를 꺼내서 쓸 때 매번 형 변환하는 절차를 없애기 위해 (가장 메인 이유)
 * 3. 보안상의 이유(모든 타입이 다 담길 수 있기 때문에 보안에 취약해진다)

 

 

 

 

ArrayList의 메소드명 ( E : element 컬렉션에 담길 요소들)

설명

컬렉션명.add(E e);

리스트의 끝에 해당 전달된 객체를 추가해주는 메소드

컬렉션명.add(int index, E e);

해당 index에 전달된 객체를 추가해주는 메소드 

컬렉션명.set(int index, E e);

해당 index에 담긴 값을 전달된 객체로 변경해주는 메소드

(수정메소드)

컬렉션명.size();

해당 리스트안에 담긴 데이터 갯수

컬렉션명.get(int index);

해당 index에 존재하는 객체를 반환해주는 메소드

컬렉션명.get(int index).추가getter메소드( );

해당 index값의  추가적인 게터메소드호출

컬렉션명.subList(int index1, int index2);

값을 추출해서 List로 반환해주는 메소드

컬렉션명.addAll(Collection c);

컬렉션을 통째로 뒤에 추가해주는 메소드

컬렉션명.clear(); 

컬렉션을 비워주는 메소드

컬렉션명.isEmpty();

컬렉션이 비워있는지 boolean값으로 돌려주는 메소드

 

 

 

 

 

 

 

 

 

반복문을 통해서 출력하기

 

1. for loop문

for(int i=0; i<컬렉션.size(); i++){
     System.out.println(list.get(i));
}

-> 인덱스 값으로 활용 가능

 

 

 

 

2. for each문

for(제네릭타입 변수명 : 컬렉션명) {                   //ex) Music music : list
     System.out.println(list.get(i));
}

-> 인덱스 값 제시하지 않아도 되어서 좀 더 깔끔하다

 

 

 

 

 

 

댓글