본문 바로가기
BACK-END/Java

[Java] API-Collection과 Map

by 로햐 2021. 11. 23.

Ⅰ. 자료구조

1-1. 자료구조란?

자료구조는 데이터를 효율적으로 이용하는 방법을 의미한다. 

자바에서는 기본적인 자료구조를 java.util.* 패키지에서 제공하고 있다. Java Collection Framework


1-2. 자료구조의 종류

자료구조 단순구조 정수  
실수
문자
문자열
선형구조 리스트
연결리스트 단순연결리스트
이중연결리스트
원형연결리스트
스택  
비선형구조 트리 일반트리
이진트리
그래프 방향그래프
무방향그래프
파일구조 순차파일  
색인파일
직접파일

1-3. Java의 자료구조

Java에서 자주 쓰이는 자료 구조인 Collection(List, Set), Map에 대해 정리.

분류 계열 클래스 저장 순서 유지 중복값 허용 비고
Collection List ArrayList O O -
Set HashSet X X -
Map Map HashMap X 키 X, Value -

1-4. 제네릭

현재 요소의 받는 값을 제한해주는 제한자.

자료구조는 원래 모든 자료형을 받을 수 있지만, 제네릭이라는 제한문자를 사용하여 들어올 자료형을 제한하는 표식.

제네릭을 통해 제한된 자료구조는 Object형 자료구조가 아닌, 특정 자료형의 객체배열처럼 사용할 수 있다.

<> 사이에는 Wrapper Class, 사용자 정의 자료형(클래스)가 들어갈 수 있다.

자료구조의 자료형을 지정해준다고 보면 쉽다. 

 

제네릭에는 객체 타입만 들어갈 수 있다.

List<String> aList = new ArrayList<>();
Set<Double> hSet = new HashSet<>();
Map<Integer, String> hMap = new HashMap<>();

//<?>에 관한 설명 추가 필요


Ⅱ. Collection

//컬렉션이란? 선형 구조. 

컬렉션의 장점 : 배열과 다르게 자료형과 크기를 지정하지 않고도 사용할 수 있다. 크기를 지정해도 더 많은 자료를 넣을 수 있다. 

2-1. List

Collection의 일종으로 저장 순서를 유지하고 중복값을 허용하는 선형 자료구조. 자료를 순서대로 나열. 가장 기본적인 자료형은 LinkedList로, 순차적으로 노드를 이동하는 포인터를 따라 자료탐색이 가능하다.

 

ArrayList

다양한 리스트를 다형성을 적용하여 관리의 용이성을 늘리기 위해서 자료형은 List로 지정하는 것이 좋다.

List aList = new ArrayList();
List<Character> bList = new ArrayList<>(3);
List<String> cList = new ArrayList<String>();

key가 중복된 경우 마지막에 실행한 코드가 덮어쓴다.

  • 자주 사용하는 메소드
메소드 의미 매개변수 반환형
.add(o) / .add(iNum, e) iNum 인덱스에 삽입 (int), Object -
.size() 리스트의 크기 반환 - int
.set(iNum, e) iNum 인덱스의 값 수정 int, Object -
.remove(iNum) iNum 인덱스의 값 삭제 int -
.subList(iNum1, iNum2) 리스트 부분 추출 int, int List
.addAll(Collection c) 컬렉션의 모든 데이터를 리스트에 삽입 Collection -
.isEmpty() 리스트가 전부 비어있는가? - boolean
.clear() 전부 삭제 - -

 

  • for each문
//제네릭 사용 X
List aList = new ArrayList<>();
aList.add(new Student(1,"가나다"));
aList.add(new Student(2,"라마바"));
aList.add(new Student(3,"사아자"));
for (Object o : aList) {
	System.out.println(o);
}

//제네릭 사용
List<Student> aList2 = new ArrayList<>();
aList2.add(new Student(1,"가나다"));
aList2.add(new Student(2,"라마바"));
aList2.add(new Student(3,"사아자"));
for (Student st : aList2) {
	System.out.println(st);
}

2-2. Set

Set은 인덱스의 개념이 없는 List와 유사하다. 저장 순서가 없고 중복이 불가능한 선형 구조.

인덱스가 없어 같은 값이 들어오면 동일 객체라고 판단하므로, 중복을 넣을 수 없다.

 

HashSet

해시 알고리즘은 데이터의 인덱스를 간단한 연산으로 구해 검색, 추가, 삭제를 효율적으로 할 수 있는 방법이다. 

Set 중에서 해시 알고리즘을 적용한 것을 HashSet이라고 한다.

 

 

 

Set<String> hSet = new HashSet<>();

 

  • 자주 사용하는 메소드
메소드 의미 매개변수 반환형
.add(o) 삽입 Object -
.size() 크기 - int
.remove(o) 해당 객체 삭제 Object -
.clear() 전부 삭제 - -
.addAll(c) 컬렉션의 모든 요소를 리스트에 삽입 Collection c -

 

  • 출력
for(Student s : st){
	System.out.println(s);
}
        
        
ArrayList<Student> alStds =new ArrayList<>(); 
alStds.addAll(stds);
for(int i=0;i<alStds.size();i++) {
	System.out.println(alStds.get(i));
}

 

※ Iterator

  • 반복자로 HashSet에서 사용 가능하다. HashSet의 요소를 하나씩 뽑아준다.
HashSet<Student> st = new HashSet<>();
Iterator<Student> it = st.iterator();

while(it.hasNext()) {
	System.out.println(it.next());
}
  • 자주 쓰는 메소드
메소드 의미 매개변수 반환형
.next() 값을 반환하고 그 값은 날아감 - Object
.hasNext() 다음 값이 있으면 true - boolean

Ⅲ. Map

Map. Mapping을 의미하며, Key와 Value의 Entry로 이뤄진 자료구조. 입력 순서에 맞춰 저장되는 것이 아니라, 연산속도에 따라 나뉜다.

Key는 식별자로 중복될 수 없지만, Value는 중복 가능하다.

3-1. HashMap

Hash 알고리즘을 적용한 Map의 한 종류.

 

  • 출력

1. Set의 Iterator을 활용

Map<String, String> st = new HashMap<>();
Set<String> keySet = st.keySet();
Iterator<String> it = keySet.iterator();
while(it.hasNext()) {
	String key = it.next();
	String value = st.get(key);
	System.out.println(key+"="+value);
}

2. Set을 Key와 Value의 세트인 Entry 형으로 받는 방법 (Entry는 java.util.Map.Entry)

Map<String, String> st = new HashMap<>();
Set<Entry<String, String>> entrySet = st.entrySet();
for(Entry<String, String> e : entrySet) {
	System.out.println(e.getKey()+"="+e.getValue());
}
  • 자주 사용하는 메소드
메소드 의미 매개변수 반환형
.put(K, V) 삽입 K key, V value -
.get(K) K key V value
.size() 크기 - int
.remove(K) 삭제 K key V value
.replace(K, V) 교체 K key, V value V value

확인해볼것▼

더보기

List 계열 

//ArrayList : 동기화를 보장하지 않음

//Vector : 동기화 보장

//LinkedList : 링크드리스트

//Stack : 스택 자료구조

 

Set 계열

//SortedSet : 정렬을 위한 Set계열의 클래스 : TreeSet

 

Map 계열

//Hashtable : 동기화 보장하는 Map계열의 클래스

//SortedMap : 정렬을 위한 Map계열의 클래스 - TreeMap

1-4. 제네릭 좀 더 공부하기

<?>

List<?> aList1 = new ArrayList<>();

//List Node 

//해시, 해시셋, 해시맵, 해시테이블에 관한거 하나 작성하기

'BACK-END > Java' 카테고리의 다른 글

[JAVA] API-JDBC  (1) 2021.12.07
[Java] API-Stream(Input & Output)  (0) 2021.11.25
[Java] API 기초와 java.lang  (1) 2021.11.22
[Java] 객체지향의 활용  (0) 2021.11.21
[Java] Java의 기초 사용  (0) 2021.11.20