YJ의 새벽

JAVA (HashSet, TreeSet) 본문

SelfStudy/JAVA

JAVA (HashSet, TreeSet)

YJDawn 2023. 2. 2. 15:05

--Set  :  순서X , 중복X 

 

  • HashSet

--Set 인터페이스 대표적인 컬렉션 클래스

--순서를 유지하려면 LinkedHashSet 클래스 사용하면 된다.

 

    EX))) HashSet Example

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class HashSetExample1 {
	public static void main(String[] args) {

		Set<String> set = new HashSet<>();
		set.add("java");
		set.add("JDBC");
		set.add("Servlet/JSP");
		set.add("java");
		set.add("iBATIS");
		
		System.out.println(set.size());     // 중복"java"제외  4 
		
		Iterator<String> iterator = set.iterator();  //iterator 생성
		
		while(iterator.hasNext()) {             // java, JDBC, Servlet/JSP, iBATIS 
			System.out.print(iterator.next()+" ");
		}	
		set.remove("JDBC");	                    // "JDBC" 삭제
		System.out.println(set.size());         //   3
		
		for(String str : set) {         // java, Servlet/JSP, iBATIS     
			System.out.print(str+" ");
		}
		System.out.println();
		set.clear();                    //set 비우기
		if(set.isEmpty()) {
			System.out.println("set이 비어있음");
		}else {
			System.out.println("값이 있음");
		}
	}
}

    

    EX))) HashSet Example ( LinkedList 를 이용하여 정렬 )

import java.util.*;
public class Example {
	public static void main(String[] args) {

		Set set = new HashSet();
		
		for(int i =0; set.size()<6 ; i++) {         // 45이하 난수 발생
			int num = (int)(Math.random()*45)+1;
			set.add(num); 
		}
		System.out.println(set);             //정렬없이 set에 저장 
		
		List list = new LinkedList(set);    
		Collections.sort(list);           //링크드리스트 사용 정렬
		System.out.println(list);	      // 정렬된 list(set) 값.
	}
}

 

    EX)))  HashSet을 이용 객체 저장.

--중복된 객체를 체크하려면 equals()와 hashCode() 를 재정의해야한다.

import java.util.HashSet;
import java.util.Set;

class Member {
	public String name;
	public int age;
	
	public Member(String name, int age) {
		this.name = name;
		this.age = age;
	}	
	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Member) {
			Member member = (Member)obj;
			return member.name.equals(name)&&member.age==age;
		}else {
			return false;
		}
	}
	@Override
	public int hashCode() {
		return name.hashCode()+age;
	}		
}
public class HashSetExample2 {
	public static void main(String[] args) {

		Set<Member> hashSet = new HashSet<>();
		
		set.add(new Member("김자바",30));
		set.add(new Member("김자바",30));
		System.out.println(hashSet.size());     //중복값 저장안함. = 1
	}
}

 

--------------------------------------------------------------------------------------------------------------------------------

 

 

  • TreeSet

--이진 탐색트리 (binary search tree)

   -- 부모보다 작은값은 왼쪽, 큰값은 오른쪽에 저장.  (저장하며 정렬됨 )

   -- 데이터가 많아질수록 추가,삭제 시간이 더 걸림. ( 비교 횟수 증가 )

--범위 검색과 정렬에 유리한 컬렉션 클래스

--HashSet보다 데이터 추가,삭제에 시간이 더 걸림.

 

 

    EX ))) TreeSet Example   ( 정렬을 하며 저장하기에 정렬 필요없음 )

import java.util.*;

public class Example {
	public static void main(String[] args) {

		Set treeSet = new TreeSet();
		
		for(int i =0; treeSet.size()<6 ; i++) {      //45 이하 난수 저장.
			int num = (int)(Math.random()*45)+1;
			treeSet.add(num);
		}
		System.out.println(treeSet);       //정렬된값.
	}
}

 

    EX))) TreeSet Example2 

import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetExample1 {
	public static void main(String[] args) {
		
		TreeSet<Integer> scores = new TreeSet<Integer>();
		scores.add(87);
		scores.add(98);
		scores.add(75);
		scores.add(93);
		scores.add(80);         // 87,98,75,93,80 저장
		int score = 0;
		
		score = scores.first();
		System.out.println("가장낮은" +score);   //75    first
		score = scores.last();
		System.out.println("가장높은" +score);   //98    last
		
		score = scores.lower(95);
		System.out.println("95보다 낮은" +score);    //93   lower
		
		score = scores.higher(95);    
		System.out.println("95보다 높은" +score);    //98   higher
		
		score = scores.floor(95); 
		System.out.println("95보다 같거나작은" +score);  // 93  floor
		
		score = scores.ceiling(95);   
		System.out.println("95보다 같거나큰" +score);    // 98  ceiling
            // scores.headSet(80); <<80보다 작은값
            // scores.tailSet(80); <<80보다 큰값
             
		System.out.println();
		Iterator<Integer> iterator = scores.iterator();
		while ( iterator.hasNext()) {
			int value = iterator.next();
			System.out.println(value);
		}                         // 75 , 80 , 87 , 93, 98
	    NavigableSet<Integer> descendingSet= scores.descendingSet();
		for( Integer score2 : descendingSet) {
			System.out.print(score2+" ");
		}                         //역순 98 93 87 80 75 
    }
}

 

    EX))) TreeSetExample3 (문자열검색)

 

import java.util.NavigableSet;
import java.util.TreeSet;
public class TreeSetExample3 {
	public static void main(String[] args) {

		TreeSet<String> treeSet = new TreeSet<>();
		treeSet.add("apple");
		treeSet.add("forever");
		treeSet.add("description");
		treeSet.add("ever");
		treeSet.add("zoo");
		treeSet.add("base");
		treeSet.add("guess");
		treeSet.add("cherry");
		
		System.out.println("c~f 사이 단어검색");
		NavigableSet<String> rangeSet = treeSet.subSet("c", true, "f", true);
		for (String word : rangeSet) {
			System.out.println(word);
		}
        // 혹은 
        //treeSet.subSet("c","f");
        
	}
}

 

 

 

'SelfStudy > JAVA' 카테고리의 다른 글

JAVA (Collections), 컬렉션 요약정리.  (0) 2023.02.03
JAVA (HashMap)  (2) 2023.02.03
JAVA (Comparable , Comparator)  (0) 2023.02.02
JAVA (Iterator, Arrays)  (0) 2023.02.02
JAVA (Stack,Queue)  (0) 2023.02.02
Comments