Set
Set 컬렉션의 특징 | 1. 요소의 저장 순서를 유지하지 않는다. 2. 같은 요소의 중복 저장을 허용하지 않는다. (null 값도 중복 되지 않아 하나의 null만 저장한다) |
HashSet 클래스 | Set 컬렉션 클래스에서 가장 많이 사용 되는 클래스 중 하나이다. JDK 1.2부터 제공되고 있으며 해시 알고리즘을 사용하여 검색 속도가 빠르다는 장점을 가짐 |
0.HashSet 인스턴스 생성
Set<String> hset = new HashSet<>();
hset.add(new String("java"));
hset.add(new String("oracle"));
hset.add(new String("jdbc"));
hset.add(new String("html"));
hset.add(new String("css"));
1. 저장 순서가 유지 되지 않는다.
System.out.println(hset);
[css, java, oracle, jdbc, html]
2.값이 같은 동등 객체를 저장하고자 했을 떄 중복 저장 되지 않는다.
hset.add(new String("java"));
System.out.println(hset);
[css, java, oracle, jdbc, html]
3.값이 같은 동등 객체를 이용해 포함 여부 확인이 가능하다.
System.out.println("포함 여부 확인 : " + hset.contains(new String("oracle")));
포함 여부 확인 : true
4.HashSet에 BookDTO 저장
Set<BookDTO> hset2 = new HashSet<>();
hset2.add(new BookDTO(1, "홍길동전", "허균", 50000));
hset2.add(new BookDTO(1, "홍길동전", "허균", 50000)); //동등 객체 중복 저장 테스트
System.out.println(hset2);
System.out.println(hset2.contains(new BookDTO(1, "홍길동전", "허균", 50000))); //동등 객체 포함 여부 테스트
[BookDTO [number=1, title=홍길동전, author=허균, price=50000]]
true
String 클래스 내에 hashCode, equals 메소드가 오버라이딩 되어 동등 객체 처리가 가능했던 것이고 직접 구현한 클래스에서 동일한 처리가 될 수 있도록 하려면 hashCode, equals 메소드를 오버라이딩 해야 한다. 저장 된 객체를 하나씩 꺼내는 기능이 따로 없다. 반복문(인덱스) 사용이 불가하다. |
1. toArray()로 배열로 변경한 뒤 for loop 사용
Object[] arr = hset.toArray();
for(int i = 0; i < arr.length; i++) {
System.out.println(i + " : " + arr[i]);
}
0 : css
1 : java
2 : oracle
3 : jdbc
4 : html
2.iterator()로 목록 만들어 연속 처리
Iterator<String> iter = hset.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}
css
java
oracle
jdbc
html
3.향상 된 for문 사용
for(String str : hset) {
System.out.println("str : " + str);
}
str : css
str : java
str : oracle
str : jdbc
str : html
LinkedHashSet -Linked+HashSet 저장 순서를 유지
LinkedHashSet 클래스 | HashSet이 가지고 있는 기능을 모두 가지고 있고 추가적으로 저장 순서를 유지하는 특징을 가지고 있다. JDK 1.4부터 제공하고 있다. |
Set<String> lhset = new LinkedHashSet<>();
lhset.add("java");
lhset.add("oracle");
lhset.add("jdbc");
lhset.add("html");
lhset.add("css");
System.out.println(lhset);
[java, oracle, jdbc, html, css]
TREESET- TREE+SET 이진 검색 트리의 형태로 요소 저장
TreeSet | 데이터가 정렬 된 상태로 저장 되는 이진 검색 트리의 형태로 요소를 저장한다. 이진 검색 트리는 데이터를 추가하거나 삭제하는 등의 기본 동작 시간이 매우 빠르다. JDK 1.2부터 제공 되고 있으며 Set 인터페이스가 가지는 특징을 그대로 가지지만 정렬 된 상태를 유지한다는 점이 다른 점이다. |
Set<String> tset = new TreeSet<>();
tset.add("java");
tset.add("oracle");
tset.add("jdbc");
tset.add("html");
tset.add("css");
저장 순서와 상관 없이 오름차순 정렬 된 상태로 출력
System.out.println(tset);
[css, html, java, jdbc, oracle]
로또 번호 발생기 (TreeSet의 특징 이용)
Set<Integer> lotto = new TreeSet<>();
while(lotto.size() < 6) {
lotto.add((int)(Math.random() * 45) + 1);
}
System.out.println(lotto);
[4, 7, 15, 22, 31, 38]
Map
Map 인터페이스의 특징 | Collection 인터페이스와는 다른 저장 방식을 가진다. key, value를 하나의 쌍으로 저장하는 방식을 사용한다. key란? value를 찾기 위한 이름 역할을 하는 객체를 의미한다. 1.요소의 저장 순서를 유지하지 않는다. 2. 키는 중복 허용하지 않지만, 키가 다르면 중복 값은 저장 가능하다. |
HashMap, HashTable, TreeMap 등의 대표적인 클래스가 있다. HashMap이 가장 많이 사용 되며 HashTable은 JDK 1.0부터 제공 되었고 HashMap과 동일하게 동작한다. 하위 호환을 위해 남겨 놓았기 때문에 HashMap을 사용하는 것이 좋다. |
HashMap | 키, 값 쌍으로 저장한다. 둘 다 반드시 객체여야 하고 기본 자료형은 오토 박싱 되어 래퍼 클래스로 저장되고 있음 |
특징 | 1. 저장 순서를 유지하지 않는다. 2. 키는 중복 저장되지 않으며 value 값만 덮어쓰기 된다. 3. 키가 다르면 값 객체 저장은 중복으로 가능하다. |
그럼 언제 쓰이나? |
|
1.HashMap 인스턴스 생성
Map hmap = new HashMap();
2.키, 값 쌍으로 저장한다. 둘 다 반드시 객체여야 한다. 기본 자료형은 오토 박싱 되어 Wrapper 클래스로 저장되고 있다.
- 저장 순서를 유지하지 않는다.
- 키는 중복 저장되지 않으며 value 값만 덮어쓰기 된다.
- 키가 다르면 값 객체 저장은 중복으로 가능하다
hmap.put("one", new Date());
hmap.put(12, "red apple");
hmap.put(33, 123);
System.out.println("hmap : " + hmap);
hmap.put(12, "yellow banana");
System.out.println("hmap : " + hmap);
hmap.put(11, "yellow banana");
System.out.println("hmap : " + hmap);
hmap : {33=123, one=Fri Jan 06 18:28:24 KST 2023, 12=red apple}
hmap : {33=123, one=Fri Jan 06 18:28:24 KST 2023, 12=yellow banana}
hmap : {33=123, one=Fri Jan 06 18:28:24 KST 2023, 11=yellow banana, 12=yellow banana}
- 값 객체의 내용을 가져올 때
- 키 값을 가지고 삭제할 때
- 저장 된 객체 수를 확인할 때
hmap.put("one", new Date());
hmap.put(12, "red apple");
hmap.put(33, 123);
System.out.println("키 11에 대한 객체 : " + hmap.get(11));
hmap.remove(11);
System.out.println("hmap : " + hmap);
System.out.println("hmap 저장 된 객체 수 : " + hmap.size());
키 11에 대한 객체 : yellow banana
hmap : {33=123, one=Fri Jan 06 18:28:24 KST 2023, 12=yellow banana}
hmap 저장 된 객체 수 : 3
제네릭 설정한 HashMap 인스턴스 생성 | Map의 key 타입은 가장 보편적으로 String 타입을 사용 |
Map<String, String> hmap2 = new HashMap<>();
hmap2.put("one", "java");
hmap2.put("two", "oracle");
hmap2.put("three", "jdbc");
hmap2.put("four", "html");
hmap2.put("five", "css");
System.out.println(hmap2);
{four=html, one=java, two=oracle, three=jdbc, five=css}
- keySet()을 이용해서 키만 따로 Set으로 만들고, iterator로 키에 대한 목록을 만든다. or 향상 된 for문을 사용한다
- iterator 사용
Set<String> keys = hmap2.keySet();
/* iterator */
Iterator<String> keyIter = keys.iterator();
while(keyIter.hasNext()) {
String key = keyIter.next();
String value = hmap2.get(key);
System.out.println(key + " = " + value);
}
for(String key : keys) {
String value = hmap2.get(key);
System.out.println(key + " = " + value);
}
System.out.println("=============================================");
four = html
one = java
two = oracle
three = jdbc
five = css
four = html
one = java
two = oracle
three = jdbc
five = css
=============================================
- entrySet()을 이용해서 Entry를 Set으로 만들고 iterator로 Entry에 대한 목록을 만든다. or 향상 된 for문을 사용
Set<Entry<String, String>> set = hmap2.entrySet();
/* iterator */
Iterator<Entry<String, String>> entryIter = set.iterator();
while(entryIter.hasNext()) {
Entry<String, String> entry = entryIter.next();
System.out.println(entry.getKey() + " = " + entry.getValue());
}
for(Entry<String, String> entry : set) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
four = html
one = java
two = oracle
three = jdbc
five = css
four = html
one = java
two = oracle
three = jdbc
five = css
- 저장 된 value 객체들만 values로 Collection으로 만든다
Collection<String> values = hmap2.values();
Iterator<String> valueIter = values.iterator();
while(valueIter.hasNext()) {
System.out.println(valueIter.next());
}
html
java
oracle
jdbc
css
Properties
Properties | 설정 파일의 값을 읽어서 어플리케이션에 적용할 때 사용한다. |
Properties prop = new Properties();
prop.setProperty("driver", "oracle.jdbc.driver.OracleDriver");
prop.setProperty("url", "jdbc:oracle:thin:@127.0.0.1:1521:xe");
prop.setProperty("user", "student");
prop.setProperty("password", "student");
try {
prop.store(new FileOutputStream("driver.dat"), "jdbc driver");
prop.store(new FileWriter("driver.txt"), "jdbc driver");
prop.storeToXML(new FileOutputStream("driver.xml"), "jdbc driver");
} catch (IOException e) {
e.printStackTrace();
}
-- listing properties --
password=student
driver=oracle.jdbc.driver.OracleDriver
user=student
url=jdbc:oracle:thin:@127.0.0.1:1521:xe
- 파일로부터 읽어와서 Properties에 기록 함.
Properties prop2 = new Properties();
try {
//prop2.load(new FileInputStream("driver.dat"));
//prop2.load(new FileReader("driver.txt"));
prop2.loadFromXML(new FileInputStream("driver.xml"));
- Properties의 모든 키 값 목록을 대상 스트림에 내보내기 한다
prop2.list(System.out);
System.out.println(prop2.getProperty("driver"));
System.out.println(prop2.getProperty("url"));
System.out.println(prop2.getProperty("user"));
System.out.println(prop2.getProperty("password"));
} catch (IOException e) {
e.printStackTrace();
}
oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@127.0.0.1:1521:xe
student
student
'java' 카테고리의 다른 글
ENUM 열거형이란? (0) | 2023.04.05 |
---|---|
java Exception13 (1) | 2023.01.09 |
java Collection12 -list3,4 (0) | 2023.01.06 |
java Collection12 -list1,2 (0) | 2023.01.06 |
java Generic11 (0) | 2023.01.06 |