상세 컨텐츠

본문 제목

자바_컬렉션 프레임워크/3대 인터페이스_ List,Set,Map

java_자바

by 쫑메이 2020. 7. 11. 00:15

본문

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

컬렉션 프레임워크(Collection Framework)에 

대해 알아보자~

 

 

 

 

 


컬렉션 프레임워크(Collection Framework)_키워드


 

 

컬렉션 프레임워크는

쉽게 말하면 데이터를 쉽게 넣고 꺼내놓는 방법

 

 

자바에서 사용하는 자료구조

자료구조(data structure)란 전산학에서 대량의 데이터를 효율적으로 이용할 수 있도록

컴퓨터에서 데이터를 추가, 조회, 수정, 삭제하는 방식을 말한다

 

 

프레임이란 잘 짜인 틀에 의해 만들어진 클래스들의 모임

 

 

 

 

 

 

 

 

 

 

 

 

 

 


컬렉션 프레임 워크의 구성


 

 

 

<컬렉션 프레임 워크의 구성>

 

 

 

 

3대 주요 인터페이스

list /set/ Map

list와 Set은 collection을 상속받아서 형제로 기본 틀은 같다

하지만 특성이 다르다

 

 

 

 

list와 Set은 collection을 상속받아서 형제로 기본 틀은 같다

하지만 특성이 다르다

 

 

 

 

list 계열 와 Set 계열의 특성을 비교해 보면.....

list 계열 :데이터가 저장될 때 순서대로 저장. 그래서 데이터 중복 허용.

순서대로 있으니 몇 번 방에 누구 책하면 알 듯 중복 가능하다 -ArrayList

 

Set 계열:보따리에 짐을 넣듯 순서를 유지하지 않는 데이터 집합.

그래서 중복을 허락하지 않는다

HashSet, TreeSet

 

Map 계열:키와 쌍으로 데이터 관리하는 집합. 사물함*(키, 값)

HashMap, Properties

 

 

 

 

 

 

 

 

 

 

 


collecttion 주요 메서드


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Set 계열


 

 

순서를 유지하지 않는 집합

=> 인덱스 번호가 없으므로 특정 위치에 직접 접근 불가능

중복을 허용하지 않음 그래서 효율적인 중복제거 수단

대표적인 구현체 클래스:HashSet, TreeSet

 

 

HashSet 인스턴스 생성=> Set 타입으로 업캐스팅도 가능(거의 모든 메서드 동일함)

Set set=new HashSet();

 

파라미터로 전달되는 요소(o)를 추가 (모든 타입 데이터 추가 가능)=> add(Object o)

set.add(1);

set.add(“이”);

set.add(3.14);

 

 

 

 

isEmpty() : 객체 내의 요소가 비어있는지 판별

set.isEmpty()

 

 

toString() : 객체 내의 모든 요소를 문자열로 결합하여 리턴(생략 가능)

set.toString()

 

 

size() : 객체 내의 요소 개수 리턴

set.size()

 

add(): 객체 내의 정수 추가

set.add(4)

 

 

contains(Object o) : 요소 o 가 객체 내에 존재하는지 리턴

set.contains(1)

 

 

remove(Object o) : 요소 삭제 및 삭제 결과 리턴

set.remove(1)

 

 

clear() : 객체 내의 모든 요소 제거

set.clear()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Set 계열_ 접근


Set 계열은 인덱스를 사용하지 않으므로 객체 내의 특정 요소에 별도로 접근 불가하다

즉 Iterator를 사용하거나, 확장 for 문을 사용해야 함

 

<방법 1>

for(Object o:set) { Object 타입으로 변수에 데이터 저장 필요

System.out.println(0);

}

 

<방법 2>

Iteratorite=set.iterator();

while(ite.hasNext()) {

System.out.println(ite.next());

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

TreeSet

기존 Set 타입의 특성에 정렬 기능을 추가한 클래스

 


Set set2=new TreeSet();

set2.add(5);

set2.add(1);

set2.add(2);

set2.add(4);

set2.add(7);

set2.add(8);

 

 

 

 

 

 

 

 

 

 

 

 


List 계열


 

 

 

 

 

순서가 유지되는 데이터의 집합으로 순서 유지를 위해 인덱스를 사용

인덱스를 사용하므로 중복 데이터를 허용. 어떻게? 인덱스가 있어 구별 가능

 

 

 

Set 계열과 기본적인 메서드 동일(Collection을 상속받았기 때문)

인덱스를 사용하는 메서드들이 추가된다

 

 

배열(Array)과 유사한 구조

대표적인 구현체 클래스:ArrayList.Vector 등

 

 

 

 

 

 

 

 

List 특징을 정리하면....

⚬순서가 있는 데이터의 집합

(순서대로 배열되어 있어 몇 번 방에 누구 책하면 알 듯 이 알 수 있음)

 

⚬같은 데이터가 들어오더라도 인덱스를 이용해 구별할 수 있어 데이터의 중복이 허용된다

 

⚬인덱스는 0부터 n-1 번까지 존재.

각각의 인덱스에 관리하는 객체의 참조 값이 연결된다

 

 

 

 

 

 

 

 

 

 

 

 


LIST의 주요 메서드(1)


 

 

<List 주요 메서드>

 

 

 

 

 

 

 

 

 

 

 


LIST의 주요 메서드(2)


 

 

 

1. add(intindex, Object o) : index 위치에 o 추가(뒤의 데이터는 한 칸씩 밀어냄)

list.add(1, 2);

System.out.println("전체 요소 출력 : " + list);

 

 

 

 

 

2.remove() 메서드는 정수 전달 시 인덱스로 사용됨

list.remove((Object) 2); => 정수 2를 삭제(정수 2 -> Object 타입으로 변환하여 지정)

System.out.println("전체 요소 출력 : " + list);

 

 

cf) list.remove(2);=> 정수 2가 아닌 2번 인덱스 요소 삭제

 

 

3.set(int index, Object o) : index 위치의 데이터를 o로 교체(기존 데이터 제거됨)

ist.set(3, 4);

System.out.println("전체 요소 출력 : " +list);

 

 

4.indexOf(Object o) : 첫 번째 인덱스부터 o를 탐색. 있으면 인덱스, 없으면 –1 리턴

System.out.println("정수 1의 인덱스 번호 : " + list.indexOf(1));

System.out.println("정수 2의 인덱스 번호 : " + list.indexOf(2));

 

 

 

5.lastIndexOf(Object o) : 마지막 인덱스부터 역순으로 o를 탐색. 출력 형식은 동일

System.out.println("정수 1의 인덱스 번호(뒤에서부터 탐색) : " + list.lastIndexOf(1));

System.out.println("정수 2의 인덱스 번호(뒤에서부터 탐색) : " + list.lastIndexOf(2));

 

 

 

6.subList(int fromIndex, int toIndex) : fromIndex <= x < toIndex 범위의 서브 리스트 추출

List subList = list.subList(2, 4); // 2 ~ 3번 인덱스까지의 목록 추출하여 리스트 객체 리턴

System.out.println(subList);

 

 

 

7.get(int index) : index 위치의 요소 리턴

 

System.out.println("2번 인덱스 데이터는? " + list.get(2));

 

 

 

 

 

 

 

 

 

 

 


List 객체의 모든 인덱스에 접근하여

각 요소 출력


 

 

1) 일반 for 문

 

for(int i = 0; i < list.size() ; i++) {

System.out.println(i + "번 인덱스 요소 : " + list.get(i));

}

 

 

 

 

 

2) 향상된 for 문

 

for(Object o : list) {

System.out.println(o);

}

 

 

 

 

 

 

 

3) Iterator

Iterator ite = list.iterator();

while(ite.hasNext()) {

System.out.println(ite.next());

 

 

 


 

 

 

 

읽느라 수고하셨습니다~!

 


 

 

 

 

 

 

 

 

 

 

 


 

부족한 글을 읽어주셔서 감사드립니다

아직 부족한 게 많으니

틀린 곳이 있다면

조언의 말씀 꼭 부탁드립니다!!!!

 

 

반응형

관련글 더보기