- Set
: 순서와 중복 불가능
1) HashSet
: 중복된 요소 저장하지 않음
- HashSet 예제(자바의 정석 Ex11_21)
import java.util.*;
public class HashSetLotto{
public static void main(String[] args) {
Set set = new HashSet();
for(int i =0; set.size()<6; i++) {
int num =(int)(Math.random()*45+1);
set.add(new Integer(num));
}
List list = new LinkedList(set);
Collections.sort(list);
System.out.println(list);
}
}
- HashSet은 중복을 허용하지 않기 때문에 로또번호 만들기에 적합하다.
- HashSet 정렬기능이 없기 때문에 Collections.sort() 를 추가하였다. (HashSet은 순서 없는 특징을 가짐 )
2) TreeSet
- 이진검색트리라는 자료구조의 형태로 데이터를 저장하는 컬렉션 클래스(왼쪽에는 기준보다 작은값, 오른쪽은 큰값)
- 정렬, 검색, 범위 검색에 높은 성능을 보이는 자료구조
- TreeSet 예제(자바의 정석 Ex11_26)
import java.util.*;
public class TreeSetLotto{
public static void main(String[] args) {
Set set = new TreeSet(); // 범위 검색 , 정렬, 정렬 필요없음
for(int i =0; set.size()<6; i++) {
int num = (int)(Math.random()*45)+1;
set.add(num);
}
System.out.println(set);
}
}
- 위에 HashSetLotto클래스와 달리 TreeSetLotto 클래스에는 정렬메서드를 따로 추가하지 않아도, 정렬기능이 있기 때문에 자동으로 정렬되어 출력된다.
- Map
: 순서 x, 중복 - 키x, 값o
1) HashMap
key : 컬렉션 내의 키중 유일(중복 X)
value : 데이터 중복 허용
key + value => entry : key와 value 묶어 하나의 데이터로 저장하는 특징
해싱 : 배열 + 링크드 리스트 - 해시함수를 이용해서 데이터를 해시테이블에 저장
- 예제(자바의 정석 ex11_32)
import java.util.*;
static HashMap School = new HashMap();
public static void main(String[] args) {
addClassNo("1반", "나나나", "20210101");
addClassNo("1반", "나나나", "20210102");
addClassNo("1반", "다다다", "20210201");
addClassNo("2반", "가가가", "20210202");
addClassNo("2반", "가가가", "20210203");
addClassNo("2반", "라라라", "20210204");
addClassNo("2반", "마마마", "20210205");
addClassNo("급식실","00000");
printList();
}
static void addClassNo(String ClassGroup, String name, String schoolNum) {
addGroup(ClassGroup);
HashMap group = (HashMap)School.get(ClassGroup);
group.put(schoolNum, name);
}
static void addGroup(String ClassGroup) {
if(!School.containsKey(ClassGroup))
School.put(ClassGroup, new HashMap());
}
static void addClassNo(String name, String schoolNum) {
addClassNo("기타", name, schoolNum);
}
static void printList() {
Set set = School.entrySet();
Iterator it = set.iterator();
while(it.hasNext()) {
Map.Entry e = (Map.Entry)it.next();
Set subSet = ((HashMap)e.getValue()).entrySet();
Iterator subIt = subSet.iterator();
System.out.println("* "+e.getKey() + "[" + subSet.size() + "]");
while(subIt.hasNext()) {
Map.Entry subE = (Map.Entry)subIt.next();
String num = (String)subE.getKey();
String name = (String)subE.getValue();
System.out.println(name + " "+num);
}
System.out.println();
}
}
}
* 그림으로 살펴보면 HashMap Shool- value에 HashMap group을 넣어 구현
참고 : 자바의정석(남궁성)
'JAVA' 카테고리의 다른 글
JAVA_Thread1 (0) | 2021.08.08 |
---|---|
JAVA_제네릭, 열거형, 애너테이션 (0) | 2021.08.07 |
JAVA_컬렉션 프레임워크(List) (0) | 2021.08.05 |
JAVA_날짜와 시간 (0) | 2021.08.04 |
JAVA_예외처리 (0) | 2021.08.03 |
댓글