SetJava2022. 12. 11. 07:51
Table of Contents
728x90
728x90
Set
중복 저장 불가능
순서가 없다 (인덱스로 관리하지 않음)
→ 데이터 검색을 위해 iterator메서드로 iterator(반복자)를 생성하고 데이터를 가져와야 한다
HashSet
데이터 크기가 어느정도 예상되면서 삽입, 삭제가 빈번할 경우 사용하는 것이 좋다
객체를 넣으면 해당 객체의 hashcode 값을 사용하여 버킷을 찾고 해당 위치에 요소가 있는지 확인한다. 같은 객체라 판단되면 저장하지 않는다
서로 다른 객체여도 같은 hashcode값을 가질 수 있다. → 해당 버킷에 이미 값이 있다면 equals메서드를 통해 비교작업을 거친다. equals=false이면 LinkedList의 형태로 버킷에 값을 추가한다
class ExamMain {
public static void main(String[] args) {
Set<String> fruit = new HashSet<String>();
// 데이터 삽입
fruit.add("사과");
fruit.add("오렌지");
fruit.add("수박");
fruit.add("포도");
// 데이터 삭제
fruit.remove("수박");
// 데이터 출력
Iterator<String> iter1 = fruit.iterator();
while(iter1.hasNext()) {
System.out.print(iter1.next()+" ");
}
System.out.println();
System.out.println(fruit.toString());
// 데이터 포함 유무
System.out.println(fruit.contains("수박"));
System.out.println(fruit.contains("포도"));
// 전체 데이터 삭제
fruit.clear();
System.out.println(fruit.toString());
// 데이터의 존재 유무
System.out.println(fruit.isEmpty());
// 해당 Set의 크기
System.out.println(fruit.size());
}
}
// Console
포도 오렌지 사과
[포도, 오렌지, 사과]
false
true
[]
true
0
public class Member {
private String name;
private int age;
public Member(String name, int age) {
this.age = age;
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static void main(String[] args) {
Set<Member> set = new HashSet<Member>();
//클래스의 인스턴스주소값이 다르기 때문에 Key값이 같아도 각각 저장 가능하다
set.add(new Member("홍길동", 30));
set.add(new Member("홍길동", 100));
Iterator<Member> iterator = set.iterator();
while(iterator.hasNext()) {
Member elem = iterator.next();
System.out.println(elem.getName() + elem.getAge());
}
}
}
// Console
홍길동30
홍길동100
TreeSet
트리구조로 저장하는 Set
오름차순으로 데이터를 저장한다
class ExamMain {
public static void main(String[] args) {
Set<Integer> set = new TreeSet<Integer>();
set.add(4); // 데이터 추가
set.add(2);
set.add(1);
set.add(3);
set.add(6);
set.add(5);
Iterator<Integer> iter2 = set.iterator();
while(iter2.hasNext()) {
System.out.print(iter2.next()+" ");
}
System.out.println();
Set<String> set2 = new TreeSet<String>();
set2.add("d");
set2.add("c");
set2.add("a");
set2.add("b");
Iterator<String> iter3 = set2.iterator();
while (iter3.hasNext()) {
System.out.print(iter3.next()+" ");
}
}
}
// Console
1 2 3 4 5 6
a b c d
728x90
300x250
@mag1c :: 꾸준히 재밌게
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!