#Iterator
- 컬렉션에 저장된 요소들을 순차적으로 읽어오는 역할
- Iterator는 Collection 인터페이스의 정의되어 있다.
메서드 | 설명 |
hasNext() | 읽어올 객체가 남아 있으면 true 리턴, 없으면 false 리턴 |
next() | 컬렉션에서 하나의 객체를 읽어옵니다. hasNext()가 선행되어야 한다. |
remove() | next()를 통해 읽어온 객체를 삭제합니다. next() |
- 메서드 활용 예제
ArrayList<String> list = ...;
Iterator<String> iterator = list.iterator();
while(iteraor.hasNext()) { // 읽어올 객체가 있으면
String str = iteratpr.next(); // next를 통해 다음 객체를 읽어온다.
if(str.equals("중복 단어")) { // 다음 객체가 조건에 부합한다면
iterator.remove(); // remove로 객체를 컬렉션에서 제거할 수 있음.
}
for (String str : list) { // for-each문을 이용해서 읽어올 수도 있다.
...
}
#Set
- 요소의 중복을 허용하지 않고, 저장 순서를 유지하지 않는 컬렉션.
- HashSet과 TreeSet이 있다.
기능 | 리턴 타이 | 메서드 | 설명 |
객체 추가 | boolean | add(Object o) | 주어진 객체를 추가하고, 성공하면 true/ 실패 false 를 반환 |
객체 검색 | boolean | contains(Object o) | 주어진 객체가 Set에 존재하는 지 확인 |
boolean | isEmpty() | Set이 비어있는지 확인 | |
Iterator | Iterator() | 저장된 객체를 하나씩 읽어오는 반복자를 리턴 | |
int | size(0 | 저장된 전체 객체의 수를 리턴 | |
객체 삭제 | void | clear() | Set에 저장된 모든 객체를 삭제 |
boolean | remove(Object o) | 주어진 객체를 삭제 |
#HashSet
- Set의 인터페이스의 특성을 가지고 있음
- HashSet에서는 다음 과정을 통해 추가된 객체가 중복값인지 검사한다.
1. 사용자가 add(Object o)를 통해 객체 추가
2. 객체의 해시코드를 hashCode() 메서드를 통해 획득
3. Set이 저장하고 있는 모든 객체의 해시코드를 hashCode() 메서드를 통해 획득
4. 두 해시코드를 비교하여 같은 해시코드가 존재하는지 검사하여 없을 시 추가
5. 중복할 시 equals() 메서드를 통해 객체 비교
#TreeSet
- 이진 탐색 트리 형태로 데이터를 저장
- 데이터의 중복 저장 허용 X / 저장 순서를 유지 X
- 최상위 노드를 '루트'
- 모든 왼쪽 자식의 값이 루트나 부모보다 작음.
- 모든 오른쪽 자식의 값이 루트나 부모보다 큼.
- Node 클래스 코드 예제
class Node {
Object element; // 객체의 주소값을 저장하는 참조변수
Node left; // 왼쪽 자식 노드의 주소값을 저장하는 참조변수
Node right; // 오른쪽 자식 노드의 주소값을 저장하는 참조변수
}
import java.util.TreeSet;
pubic class TreeSetExample {
public static void main(String[] argse) {
TreeSet<String> workers = new TreeSet<>();
workers.add("Han taehee");
workers.add("Kang sungjin");
workers.add("An hyomin");
System.out.println(workers);
System.out.println(workers.first());
System.out.println(workers.last());
System.out.println(workers.higher("Han"));
System.out.println(workers.subSet("An", "Kang"));
}
}
// 출력값
[An hyomin, Han taehee, Kang sungjin]
An hyomin
Kang sungjin
Han taehee
[An hyomin, Han taehee]
#Map
- 키와 값으로 구성된 객체를 저장하는 구조
- Entry 객체를 키와 값을 각각 Key 객체와 Value 객체로 저장.
- 키는 중복 저장 불가능! / 값은 중복 저장 가능!
- 기존의 저장된 키로 새로운 값 저장 시 기존값 대체됨.
- Map 메서드
기능 | 리턴 타입 | 메서드 | 설명 |
객체 추가 | Object | put(Object key, Object value) | 주어지 키로 값을 저장. 해당 키가 새로운 키일 경우 null 리턴. 기존 키일 경우 기존값을 대체하고 대체되기 이전 값 리턴. |
객체 검색 | boolean | contatinsKey(Object key) | 주어진 키가 있으면 true, 없으면 false를 리턴 |
boolean | containsValue(Object value) | 주어진 값이 있으면 true, 없으면 false를 리턴 | |
Set | entrySet() | 키와 값의 쌍으로 구성된 모든 Map.Entry객체를 Set에 담아서 리턴. |
|
Objcet | get(Object key) | 주어진 키에 해당하는 값을 리턴. | |
boolean | isEmpty() | 컬렉션이 비어 있는지 확인. | |
Set | keySet() | 모든 키를 Set 객체에 담아서 리턴. | |
int | size() | 저장된 Entry 객체의 총 갯수를 리턴 | |
Collection | values() | 저장된 모든 값을 Collection에 담아서 리턴 | |
객체 삭제 | void | clear() | 모든 Map.Entry(키와 값)을 삭제. |
Object | remove(Object key) | 주어진 키와 일치하는 Map.Entry를 삭제하고 값을 리턴 |
#HashMap
- HashMap은 해시 함수를 통해 키와 값이 저장되는 위치를 결정. (사용자가 위치 알 수 없음)
- 삽입되는 순서와 위치 또한 관계 없음.
- 많은 양의 데이터를 검색할 때 유리
- HashMap의 개별요소인 Map.Entry 인터페이스 메서드
리턴 타입 | 메서드 | 설명 |
boolean | equals(Objcet o) | 동일한 Entry 객치인지 비교 |
Object | getKey() | Entry 객체의 Key 객체를 반환 |
Object | getValue() | Entry 객체의 Value 객체 반환 |
int | hashCode() | Entry 객체의 해시코드 반환 |
Objcet | setValue(Object value) | Entry 객체의 Value 객체를 인자로 전달한 value 객체로 바꿈 |
- HashMap의 사용
import java.util.*;
public class HashMapExample {
pubilc static void main(String[] args) {
HashMap<String, Imteher> fcBayern = new HashMap<>();
fcBayern.put("노이어", 1);
fcBayern.put("김민재", 3);
fcBayern.put("김미희", 6);
fcBayern.put("카네", 9);
fcBayern.put("뮐러", 25);
System.out.println("총 entry 수: " + fcBayern.size()); // 총 entry 수: 5
System.out.println("김민재 : " + fcBayern.get("김민재")); // 김민재 : 3
Set<String> keySet = fcBayern.keySet(); // key를 요소로 가지는 Set 생성 (순회를 위해 필요)
Iterator<String> keyIterator = keySet.iterator(); // keySet 순회하며 value 읽어오기
while(keyIterator.hasNext()) {
String key = keyIterator.next();
Integer value = fcBayern.get(key);
System.out.println(key + " : " + value);
}
fcBayern.remove("김미희"); // 객체 삭제
System.out.println("총 entry 수: " + fcBayern.size()); // 총 entry 수: 4
// Entry 객체를 요소로 가지는 Set을 생성 -> 순회를 위해 필요
Set<Map.Entry<String, Inteeger>> entrySet = fcBayern.entrySet();
// entrySet 순회 value 읽어오기
Iterator<fcBayern.Entry<String, Integer>> entryIterator = entrySet.iterator();
while(entryIterator.hasNext()) {
Map.Entry<String, Integer> entry = entryIterator.next();
String key = entry.getKey(); // Map.Entry 인터페이스의 메서드
Integer value = entry.getValue(); // Map.Entry 인터페이스의 메서드
System.out.println(key + " : " + value):
}
map.clear(); // 객체 전체 삭제
}
}
- Map은 키와 값이 쌍으로 저장되어 있어 iterator() 직접 호출이 불가능.
keySet() 이나 entrySet() 메서드를 이용해 Set 형태로 반환된 컬렉션에 iterator() 를 호출하여 반복자 만든 후 순회 가능.
#Hashtable
- HashMap과 동일한 내부 구조. 사용 방법 유사.
import java.util.*;
public class HashtableExample {
public static void main(String[] args) {
Hashtable<String, String> map = new Hashtable<String, String>();
map.put("Spring", "225");
map.put("Summper", "588");
map.put("Fall", "9125");
map.put("Winter", "1573");
System.out.println(map);
Scanner sc = new Scanner(Sytem.in);
while (true) {
System.out.println("아이디와 비밀번호를 입력해 주세요.");
System.out.println("아이디");
String id = sc.nextLine();
System.out.println("비밀번호");
String pw = sc.nextLine();
if (map.containsKey(id)) {
if (map.get(id).equals(password)) {
System.out.println("로그인 성공!")
break;
}
else System.out.println("비밀번호가 틀렸습니다.");
}
else System.out.println("아이디가 존재하지 않습니다.");
}
}
}
'개발지 > Today I learn' 카테고리의 다른 글
[0823] 자바 애너테이션 (메타 애너테이션, 사용자 정의 애너테이션) (0) | 2023.08.23 |
---|---|
[0823] 자바 애너테이션 (표준 애너테이션) (0) | 2023.08.23 |
[0810] 자바 컬렉션프레임워크 (List) (0) | 2023.08.10 |
[0810] 자바 컬렉션 4 (컬렉션 프레임워크) (0) | 2023.08.10 |
[0809] 자바 컬렉션 3 (예외 처리) (0) | 2023.08.09 |