1. List 인터페이스
add, get
add : 추가 add( ? ) <- 파라미터 값이 중요함.
get : 조회 ?get <- 파라미터가 없고 리턴이 있음
2. Set 인터페이스
중복을 허용하지않고, 저장순서가 유지되지않는 컬렉션인터페이스다.
구현클래스로는 HashSet, LinkedHashSet, TreeSet이 있다.
HashSet은 저장순서를 알수없고
LinkedHashSet 저장순서를 알수있고
TreeSet 순서를 기억하는 구조이다.
p.372 표 삽입필요
예제)
package chapter13;
import java.util.HashSet;
import java.util.Set;
public class SetEx {
public static void main(String[] args) {
HashSet<Integer> set = new HashSet<Integer>();
set.add(1); //true
set.add(2); //true
set.add(3); //true
set.add(2); //false
set.add(3); //false
System.out.println(set);
HashSet<Integer> set2 = new HashSet<Integer>();
set2.add(3);
set2.add(2);
set2.add(4);
System.out.println(set2);
Set<Integer> target = new HashSet<>(set);
System.out.println("=====================");
target.retainAll(set2);
System.out.println(target); // 교집합
target = new HashSet<>(set);
System.out.println("=====================");
target.addAll(set2);
System.out.println(target); // 합집합
target = new HashSet<>(set);
System.out.println("=====================");
target.removeAll(set2);
System.out.println(target); // 차집합
}
}
package chapter13;
public class Addr {
String tel;
String name;
public Addr(String tel, String name) {
this.tel = tel;
this.name = name;
}
@Override
public String toString() {
return "Addr [tel=" + tel + ", name=" + name + "]";
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return tel.equals(((Addr)obj).tel);
}
@Override
public int hashCode() {
return tel.hashCode();
}
}
package chapter13;
import java.util.HashSet;
import java.util.Set;
public class AddrEx {
public static void main(String[] args) {
System.out.println("1111".hashCode());
System.out.println(new String("1111").hashCode());
System.out.println(new Addr("1111", "홍길동").hashCode());
Set<Addr> addrs = new HashSet<Addr>();
addrs.add(new Addr("1111", "홍길동"));
addrs.add(new Addr("2222", "고길동")); // 인스턴스를 같이 만듬
Addr addr = new Addr("3333", "김길동"); // 따로 만듬
addrs.add(addr);
addrs.add(addr); // 중복을 배제하기 때문에 출력시 3개만 나옴
addrs.add(new Addr("1111", "홍길동"));
System.out.println(addrs);
String str1 = "abcb";
String str2 = new String("abcd");
System.out.println(str1.equals(str2));
System.out.println(str1.compareTo(str2));
}
}
set은 중복처리가 힘들다 위 예제를 보고 중복처리에 대한 것을 확인하자.
※ 해시 함수(Hash Function)
탐색에 대한 속도향상을 위한 처리방법
※ 트리 (Tree)
node(요소)
트리는 부모가 무조건 하나이며 자식은 여러개 올 수 있다 (상속과 비슷함)
자식이 0개에서 최대 2개가 되면 2진트리라고 한다.
제일 조상 노드는 root node라고 하고 제일 최하단에 있는 노드를 leaf node라고 한다.
LTR : 정렬순서 (Left Top Right)
트리구조는 입출력시 정렬하려고 사용한다.
트리자료구조형을 사용하기 위해선 반드시 대상 자료형이 비교가 가능한 자료형 이여야 한다.. [제대로 못들음 ㅠ..]
트리구조 예제)
package chapter13;
import java.util.Objects;
public class Addr implements Comparable<Addr>{
String tel;
String name;
public Addr(String tel, String name) {
this.tel = tel;
this.name = name;
}
@Override
public String toString() {
return "Addr [tel=" + tel + ", name=" + name + "]";
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return tel.equals(((Addr)obj).tel) && name.equals(((Addr)obj).name);
}
@Override
public int hashCode() {
// return tel.hashCode() + name.hashCode();
return Objects.hash(tel, name);
}
@Override
public int compareTo(Addr o) {
return tel.compareTo(o.tel);
// 전화번호를 가지고 오름차순을 하겠다는 뜻
// return 바로 뒤에 나오는 tel에 -기호를 넣으면 내림차순이 된다.
}
}
package chapter13;
import java.util.Set;
import java.util.TreeSet;
public class SetEx2 {
public static void main(String[] args) {
Set<Addr> addrs = new TreeSet<Addr>();
addrs.add(new Addr("1111", "홍길동"));
addrs.add(new Addr("1115", "홍길동"));
addrs.add(new Addr("1113", "홍길동"));
addrs.add(new Addr("1112", "홍길동"));
addrs.add(new Addr("1114", "홍길동"));
System.out.println(addrs);
}
}
'JAVA' 카테고리의 다른 글
23-07-10 객체 지향 프로그래밍 (OOP / Object-Oriented Programming) (0) | 2023.07.10 |
---|---|
23-03-02(2) JAVA (스레드 (0) | 2023.03.02 |
23-02-01(2) JAVA (Calender클래스, DecimalFormat 클래스, SimpleDateFormat, 컬렉션 프레임워크, List 인터페이스) (0) | 2023.02.01 |
23-01-31 (2) JAVA (StringBuffer, Math 클래스, Wrapper 클래스 (0) | 2023.01.31 |
23-01-30(2) 자바 (system클래스, class 클래스, String 클래스) (0) | 2023.01.30 |