KIC/JAVA
day26 - JAVA (자바, Collection Framework)
바차
2021. 7. 20. 18:08
반응형
[Collection Framework]
-> 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 제공되는 컬렉션 라이브러리
-> java.util 패키지에 포함
-> 인터페이스를 통해서 정형화된 방법으로 다양한 컬렉션 클래스 이용
[반복자]
-> Iteraor는 반복적으로 요소를 읽어내는 반복자이다.
[Map 컬렉션]
-> 키와 값으로 구성된 Map.Entry 객체를 저장하는 구조
-> 키와 값은 모두 객체이다.
-> 키는 중복될 수 없지만 값은 중복 저장 가능하다.
[구현 클래스]
-> HashMap, Hashtable, LinkedHashMap, Properties, TreeMap
[Map 컬렉션 sort 예시]
package javaPro.java_collection;
public class Person implements Comparable<Person> {
String name;
int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person = [" + " name='" + name + "'" + ", age='" + age + "'" + "]";
}
// name.equals(p.name) && age == p.age; , equals
// name.hashCode() + age; hashcode
@Override
public boolean equals(Object obj) {
Person p = (Person) obj;
return name.equals(p.name) && age == p.age;
}
@Override
public int hashCode() {
return name.hashCode() + age;
}
@Override
public int compareTo(Person o) {
// TODO Auto-generated method stub
// return age - o.age; // 나이순 오름차순
// return age - o.age*(-1); // 나이순 내림차순
// return (name.compareTo(o.name)); // 이름순 오름차순
return (name.compareTo(o.name)) * (-1); // 이름순 내림차순;
}
}
package javaPro.java_collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public interface ListEx4 {
public static void main(String[] args) {
List<Person> li = new ArrayList<Person>();
li.add(new Person("홍길동", 14));
li.add(new Person("홍길동", 10));
li.add(new Person("홍길동", 30));
li.add(new Person("이정민", 10));
li.add(new Person("김윤민", 16));
Person p1 = new Person("김삿갓", 20);
li.add(p1);
print(li);
System.out.println("=====================");
Collections.sort(li);
// error sort를 할 수 있는 기본적 요소가 있어야 한다. -> Comparable 이 있어야 한다.
print(li);
// List<Integer> li2 = new ArrayList<Integer>();
// li2.add(11);
// li2.add(12);
// li2.add(3);
// Collections.sort(li2);
// System.out.println(li2);
}
public static void print(List li) {
for (Object ob : li) {
System.out.println(ob);
}
}
}
[Vector 예제]
package javaPro.java_collection;
import java.util.Vector;
public class VectorEx1 {
public static void main(String[] args) {
Vector<String> v = new Vector<String>(5);
// 용량이 5인 Vector 생성
v.add("1");
v.add("2");
v.add("3");
print(v);
v.trimToSize(); // 빈 공간을 없앤다. 용량과 크기가 같아진다.)
System.out.println("=== After trimToSize() === ");
print(v);
v.ensureCapacity(6);
// v의 capacity를 최소한 6이 되도록 한다.
// 만일 v의 capacity가 6이상이라면 아무 일도 일어나지 않는다. 현재는 v의
// capacity가 3이므로 크기가 6인 배열을 생성해서 v의 내용을 복사했다.
System.out.println(" === After ensureCapacity (6) === ");
print(v);
v.setSize(7); // 용량 7로 -> 빈공간 null이 붙는다.
System.out.println("=== After setSize(7) === ");
print(v);
v.clear();
System.out.println("==== After clear() === ");
print(v);
}
public static void print(Vector v) {
System.out.println(v);
System.out.println("size : " + v.size());
System.out.println("capasity : " + v.capacity());
}
}
[Set 예제]
package javaPro.java_collection;
import java.util.HashSet;
import java.util.Set;
public class SetEx1 {
public static void main(String[] args) {
Object[] arr = { "홍길동", 1, "1", "김삿갓", "이몽룡",
"홍길동", "성춘향", "향단이", "홍길동", "김삿갓" };
Set<Object> set1 = new HashSet<Object>();
Set<Object> set2 = new HashSet<Object>();
Set<Object> set3 = new HashSet<Object>();
// Set에는 중복값이 들어가면 false이므로
//홍길동은 중복된 값을 만났을 때 다른 arr에 저장되게 된다.
for (int i = 0; i < arr.length; i++) {
if (!set1.add(arr[i])) {
if (!set2.add(arr[i])) {
set3.add(arr[i]);
}
}
System.out.println(set1);
System.out.println(set2);
System.out.println(set3);
}
}
}
[Map 예제]
package javaPro.java_collection;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapEx1 {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
String[] names = { "홍길동", "김삿갓", "이몽룡", "임꺽정", "김삿갓" };
int[] nums = { 1234, 4567, 2350, 9870, 3456 };
for (int i = 0; i < names.length; i++) {
map.put(names[i], nums[i]);
}
System.out.println(map);
// Value =map.get(Key) => key에 해당하는 Value 값을 리턴
System.out.println("홍길동의 번호 : " + map.get("홍길동"));
System.out.println("이몽룡의 번호 :" + map.get("이몽룡"));
System.out.println("김삿갓의 번호 :" + map.get("김삿갓"));
// Key 값들만 조회
System.out.println("Key들만 조회하기");
Set<String> keys = map.keySet();
for (String k : keys) {
System.out.println(k + "의 번호" + map.get(k));
}
// Value값들만 조회하기
System.out.println("Value 값들만 조회");
Collection<Integer> values = map.values(); // => Key값 조회 불가
for (Integer v : values) {
System.out.println(v);
// Key, Value 201
}
System.out.println("Key, Value의 쌍인 객체로 조회");
Set<Map.Entry<String, Integer>> entry = map.entrySet();
for (Map.Entry<String, Integer> m : entry) {
System.out.println(m.getKey() + "의 번호 :" + m.getValue());
System.out.println(m);
}
}
}
300x250