본문 바로가기
Java

[Java]컬랙션 정리

by bkuk 2022. 10. 12.

https://crazykim2.tistory.com/557

 

[JAVA] 컬렉션(Collection)이란?(추가 : Collecion의 요소 상세설명)

안녕하세요 이번 포스팅에서는 자바의 컬렉션(Collection)에 대해서 알아보겠습니다 Collection은 많이 사용되지만 정확하게 어떤 것인지는 저도 모른채로 사용을 했습니다 이번 포스팅을 하면서 제

crazykim2.tistory.com

 

 

컬랙션 프레임워크란?

프로그램을 개발할 떄 사용하는 자료를 어떤 구조로 관리할 것인지는 굉장히 중요합니다. 이때 사용하는 것이 자료 구조(data structure)이며 자바에서는 필요한 자료 구조를 미리 구현하여 java.util 패키지에서 제공하고 있는데, 이를 컬렉션 프레임 워크라고 부릅니다.

컬렉션 프레임워크의 전체 구조는 Collection 인터페이스와 Map 인터페이스 기반으로 이루어져 있으며,

Collection 인터페이스는 하나의 자료를 모아서 관리하는데 필요한 기능을 제공하고, Map 인터페이스는 쌍(pair)으로 된 자료들을 관리하는데 유용한 기능을 제공합니다.

 

Collection 인터페이스 

  • List 인터페이스: 순서가 있는 자료 관리, 중복 허용합니다. 주요 클래스는 ArrayList, Vector, LikedList 등이 있음.
  • Set 인터페이스: 순서가 정해져 있지 않으며, 중복을 허용하지 않음. 주요 클래스는 HashSet, TreeSet 등이 있음.
boolean add(E e) Colletion에 객체를 추가
void clear() Colletion의 모든 객체를 제거
Iterator<E> iterator Colletion을 순환할 반복자(Iterator)를 반환
boolean remove(Object o) Colletion에 매개변수에 해당하는 인스턴스가 존재하면 제거
int size() Colletion에 있는 요소의 개수를 반환

 

예제

// 객체 생성
ArrayList al1 = new ArrayList();

// 데이터 삽입 add() 메서드 사용, Object로 형변환
al1.add( "홍갈동" );
al1.add( "박문수" );
al1.add( "이몽룡" );

// 전체 데이터 toString(), 크기 확인 size()
System.out.println( al1.toString() );	// [홍갈동, 박문수, 이몽룡]
System.out.println( al1.size() );	// 3

// 인덱스를 통한 데이터 삭제 remove(index)
al1.remove(0);	// index 0의 데이터 삭제
System.out.println( al1.toString() );	// [박문수, 이몽룡]

// 인덱스를 통한 데이터 출력 get(index)
System.out.println( al1.get(0));	// 박문수

// 객체 생성
Vector v1 = new Vector();

// 데이터 삽입 시 Object로 형변환
v1.add( "홍길동" );
v1.add( "박문수" );
v1.add( "이몽룡" );

System.out.println( v1.toString() );	// [홍길동, 박문수, 이몽룡]
System.out.println( v1.size() );	// 3

v1.remove(0);	// index 0의 데이터 삭제
System.out.println( v1.toString() );	// [박문수, 이몽룡]
System.out.println( v1.get(0));	// 박문수

 

 

이렇듯 제네릭(Generic)은 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미한다. 한마디로 특정(Specific) 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반(Generic) 타입이라는 것이다.

만약 다른 타입으로 쓴다면?

 

// for문을 통해 전체 데이터 출력
for( int i = 0; i < al2.size(); i++) {
    String str = al2.get(i);
    System.out.print( str + " " ); // 홍길동 박문수 임꺽정 
}

// 향상된 for문을 통해 전체 데이터 출력
for( String str : al2 ) {
    System.out.print( str + " " ); // 홍길동 박문수 임꺽정 
}

 

 

 

  • Generic(제네릭)의 장점

 

1. 제네릭을 사용하면 잘못된 타입이 들어올 수 있는 것을 컴파일 단계에서 방지할 수 있다.

2. 클래스 외부에서 타입을 지정해주기 때문에 따로 타입을 체크하고 변환해줄 필요가 없다. 즉, 관리하기가 편하다.

3. 비슷한 기능을 지원하는 경우 코드의 재사용성이 높아진다.

 

 

Queue<String> queue = new LinkedList<>();

queue.offer( "홍길동" );
queue.offer( "박문수" );
queue.offer( "임꺽정" );

System.out.println( queue.toString() );	// [홍길동, 박문수, 임꺽정]

queue.add("박문수");

System.out.println( queue.toString() ); // [홍길동, 박문수, 임꺽정, 박문수]

System.out.println( queue.poll() );	// 홍길동

System.out.println( queue.toString() );	// [박문수, 임꺽정, 박문수]

while( !queue.isEmpty()) {
    System.out.println( queue.poll()); // 박문수 , 임꺽정, 박문수가 출력됨.
}

 

 

Stack<String> stack = new Stack<>();

stack.push( "홍길동" );
stack.push( "박문수" );
stack.push( "임꺽정" );

System.out.println( stack.toString() ); // [홍길동, 박문수, 임꺽정]
System.out.println( stack.size() ); // 3

//stack.push( "박문수" );
stack.add( "박문수" );
System.out.println( stack.toString() ); // [홍길동, 박문수, 임꺽정, 박문수]

System.out.println( stack.pop() ); // 박문수

System.out.println( stack.toString() ); // [홍길동, 박문수, 임꺽정]

// 전체 데이터
while( !stack.isEmpty() ) {
    System.out.println( stack.pop() ); // 임꺽정 - 박문수 - 홍길동
}

System.out.println( stack.toString() );	// []

댓글