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


SMALL

'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

+ Recent posts