Java

자바 Collection List, Set

최종군 2024. 7. 9. 18:06

 

컬렉션 :  

* 자료구조에 대한 기능을 제공하는 기본 클래스 

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

 

컬렉션 프레임워크 :

자료구조 및 알고리즘을 구현해 놓은 일종의 라이브러리이다

제네릭 기반으로 구현이 되어 있다 

 

배열의 문제점 : 

1. 한 번 크기를 지정하면 변경할 수 없다 

- 공간 크기가 부족하면 에러가 발생 → 할당 시 넉넉한 크기로 할당하게 됨 (메모리 낭비)

- 필요에 따라 공간을 늘리거나 줄일 수 없음

 

2. 배열에 기록된 데이터에 대한 중간 위치의 추가, 삭제가 불편하다.

- 추가, 삭제할 데이터부터 마지막 기록된 데이터까지 하나씩 뒤로 밀어내고 추가해야 함 (복잡한 알고리즘)

 

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

 

 

컬렉션 장점 : 

 

1.저장하는 크기의 제약이 없다. 

2. 추가, 삭제, 정렬 등의 기능 처리가 간단하게 해결된다.

-자료를 구조적으로 처리하는 자료구조가 내장되어 있어 알고리즘 구현이 필요 없다 

3.여러 타입의 데이터가 저장 가능하다.

-객체만 저장할 수 있기 때문에 필요에 따라 기본 자료형을 저장해야 하는 경우 

Wrapper 클래스를 사용한다 

 

 

List<E> 인터페이스

 

ArrayList<E> 배열 기반 자료구조, 배열을 이용하여 인스턴스 저장한다 

배열 기반 자료구조이지만 공간의 확보 및 확장은 ArrayList 인스턴스가 스스로 처리한다.

 

ArrayList 장점 :  저장된 인스턴스의 참조가 빠르다

                 

                 단점 : 저장 공간을 늘리는 과정에서 시간이 비교적 많이 소요된다

                         : 인스턴스의 삭제 과정에서 많은 연산이 필요할 수 있다. 따라서 느릴 수 있다

 

 

 

 

 

LinkedList<E> 리스트 기반 자료구조, 리스트를 구성하여 인스턴스 저장한다  

- 장점 : 저장 공간을 늘리는 과정이 간단하다 

           : 저장된 인스턴스의 삭제 과정이 단순하다 

 

- 단점 : 저장된 인스턴스의 참조 과정이 배열에 비해 복잡하다. 

 

 


 

set 특징 : 

- 중복 허용 안됨 

- 순서가 없다 

 

해시(Hash) 알고리즘 : 특정 기준에 따라 데이터를 분류하는 방식(알고리즘)

 

HashSet : 

* 중복 데이터 판단 : equals, hashCode 메소드 

* [1] hashCode : 기준이 되는 값(데이터)를 정의
* [2] equals : hashCode 같이 같을 경우 동일 데이터 판단 로직 정의

 

 

set : 데이터 조회 방법 ->

 

[1] Iterator (반복자) 사용

 

- Iterator 객체 생성 : set_참조변수.iterator();
- 데이터 유/무 판단 : iterator_참조변수.hasNext();
- 데이터 조회 : iterator_참조변수.next();

 

* [2] 향상된 for문 (for - each)
* for(Set에 저장된 데이터 타입(자료형) 변수명 : Set_참조변수명) {
*   // 변수명을 사용하여 데이터에 접근
* }

 

* Object
*     - equals() : 두 객체의 주소값을 비교하여 일치하면 true. 일치하지 않으면 false 반환
*     - hashCode() : 해당 객체의 주소값을 가지고 10진수 형태로 만들어 반환

 

 

hSet1.add("기다운님 안녕하세요");
hSet1.add(new String("기다운님 안녕하세요")); // 생성자로 생성
hSet1.add(new String("여러분"));
hSet1.add(new String("힘내요"));
hSet1.add(new String("여러분"));

 

HashSet 공간에는 객체가 추가될 때마다 동일 객체인지 비교하여 추가함 

- > 동일 객체 판단 기준 :  hashCode 결과가 일치하고, equlas 메소드 비교 시 true일 때

 

 

 

 

 

 

 

 

'Java' 카테고리의 다른 글

자바 복습하기 _ 1  (0) 2024.07.11
자바 변수부터 콜랙션까지 내용 정리  (0) 2024.07.10
자바 입출력 완전 이해하기  (0) 2024.07.07
클래스, 상속  (0) 2024.07.06
KH 교육과정 제네릭  (0) 2024.07.04