HashSet 과 TreeSet HashMap 및 TreeMap 에 대한 소개

7613 단어
HashSet 및 TreeSet 소개
HashSet
특징: HashSet 바 텀 데이터 구 조 는 해시 표 입 니 다. HashSet 는 스 레 드 안전 한 집합 요소 가 아니 라 null 해시 표 일 수 있 습 니 다. 하나의 요소 가 링크 인 배열 로 배열 과 링크 의 장점 을 종합 하 였 습 니 다.
데 이 터 를 저장 하 는 과정: HashSet 집합 에 요 소 를 저장 할 때 HashSet 은 대상 의 hashCode () 방법 을 호출 하여 대상 의 hashCode 값 을 얻 은 다음 hashCode 값 에 따라 대상 이 HashSet 에 저장 되 는 위 치 를 결정 합 니 다.(HashSet 보증 요소 의 유일 성 은 요소 재 작성 hashCode () 와 equals () 방법 으로 보장 되 며, 재 작성 하지 않 으 면 보장 할 수 없습니다.)
public class Text1 {
  
    public static void main(String[] args) {
        HashSet list = new HashSet<>();
        list.add(new Student("zhangsan", 19));//  add        
        list.add(new Student("zhangsan", 19));
        list.add(new Student("lisi", 20));
        list.add(new Student("wangwu", 22));
        for (Student student : list) {//      
            student.show();
        }
    }
}
//                             


TreeSet
특징: 사용자 정의 대상 을 저장 하고 요소 의 유일 성 을 확보 합 니 다.만약 두 대상 의 구성원 변수 가 모두 같다 면 우 리 는 같은 대상 이 라 고 생각 합 니 다. 일반적인 질서 있 는 실현 은 우리 가 그의 자연 정렬 이나 비교 기 정렬 을 실현 해 야 합 니 다.
자연 정렬
    TreeSet           ,        ,      
      Comparable             

            compareTo             0         
		      
    @Override
    public int compareTo(Student o) {
        int num=this.getAge()-o.getAge();
        int num2=num==0?this.getName().compareTo(o.getName()):num;
        return num2;
    }
        Comparable   ,       compareto  

비교 기 정렬
	TreeSet                    
	   TreeSet     ,         、
public class Text2 {
    //3、     ,        TreeSet   ,   
    public static void main(String[] args) {
        TreeSet treeSet = new TreeSet<>(new Comparator() {
            @Override
            public int compare(Student o1, Student o2) {
                int num=o1.getAge()-o2.getAge();
                int num2=num==0?o1.getName().compareTo(o2.getName()):num;
                return num2;
            }
        });
        treeSet.add(new Student("zhangsan", 19));
        treeSet.add(new Student("zhangsan", 19));
        treeSet.add(new Student("lisi", 20));
        treeSet.add(new Student("wangwu", 22));

        for (Student student : treeSet) {
            System.out.println(student);
        }
    }
}


HashMap 과 TreeMap 을 이야기 하기 전에 저희 가 먼저 지 도 를 알 아 보도 록 하 겠 습 니 다.
Map 의 소개: 키 값 과 저 장 된 데이터 두 부분 으로 구성 되 어 있 습 니 다.
Map 인터페이스 와 Collection 인터페이스의 차이: Map 은 2 열 이 고 Collection 은 1 열 Map 의 키 가 유일 하 며 Collection 의 서브 시스템 set 는 유일한 Map 집합 데이터 구 조 는 키 에 유효 하 며 값 과 무관 합 니 다.Collection 집합 데이터 구 조 는 요소 에 유효 합 니 다.
방법 소개:
   a:     
		V put(K key,V value):    。           ?  
			         ,       ,  null
			          ,           ,      
	b:    
		void clear():          
		V remove(Object key):          ,     
	c:    
		boolean containsKey(Object key):            
		boolean containsValue(Object value):            
		boolean isEmpty():        
	d:    
		Set> entrySet():         Set  
		V get(Object key):      
		Set keySet():           
		Collection values():           
	e:    
		int size():            

HashMap
HashMap 의 소개: 키 값 에 대한 유일한 판단 을 위해 hashCode 방법 과 equals 방법 을 다시 써 야 합 니 다.
HashMap 과 Hashtable 의 차이 점:
    HashMap Hashtable   :	  API    
	HashMap:      ,   .  null  null 
	Hashtable:      ,    .   null  null 
public class MyTest {
    public static void main(String[] args) {
        HashMap map = new HashMap<>();
        map.put("   ", "   ");
        map.put("  ", "   ");
        map.put("   ", "   ");
        Set keySet = map.keySet();//    
        
        for (String key : keySet) {//      get   
            System.out.println(key+"=="+map.get(key));
        }
    }
}


다른 옮 겨 다 니 는 방식 은 entry set () 를 통 해 키 값 과 데 이 터 를 가 져 오 는 set 집합 입 니 다.
Set> entries = hashMap.entrySet();
for (Map.Entry entry : entries) {
    System.out.println(entry.getKey()+"==="+entry.getValue());
}


TreeMap
Treemap 의 소개: 키 의 데이터 구 조 는 빨간색 과 검은색 트 리 로 키 의 정렬 과 유일 성 을 확보 할 수 있 습 니 다. (TreeMap 키 는 null 삽입 을 허용 하지 않 습 니 다) 정렬 은 자연 정렬 과 비교 기 정렬 스 레 드 로 나 뉘 어 안전 하지 않 은 효율 이 높 습 니 다.
우 리 는 TreeMap 의 특성 을 이용 하여 우리 의 수 요 를 실현 할 수 있 습 니 다. 예 를 들 어 데 이 터 를 저장 한 후에 우리 의 수요 에 따라 스스로 순 서 를 정할 수 있 습 니 다.
예제: 학생 대상 을 키 로 삼 아 학생 의 나이 에 따라 어 릴 때 부터 어른 까지 정렬 합 니 다.
public class MyTest6 {
    public static void main(String[] args) {
        //Map       ,     

        TreeMap treeMap = new TreeMap<>(new Comparator() {
            @Override
            public int compare(Student s1, Student s2) {
                int i = s1.getAge() - s2.getAge();
                int j=i==0?s1.getName().compareTo(s2.getName()):i;
                return j;
            }
        });

        
        treeMap.put(new Student("zhangsan",1),1);
        treeMap.put(new Student("zhangsan", 10), 1);
        treeMap.put(new Student("zhangsan", 12), 1);
        treeMap.put(new Student("zhangsan", 122), 1);
        treeMap.put(new Student("zhangsan", 144), 1);
        treeMap.put(new Student("zhangsan", 109), 1);
        treeMap.put(new Student("zhangsan", 156), 1);
        treeMap.put(new Student("zhangsan", 124), 1);
        treeMap.put(new Student("zhangsan", 124), 1);

        Set> entries = treeMap.entrySet();

        for (Map.Entry en : entries) {
            Student key = en.getKey();
            Integer value = en.getValue();
            System.out.println(key.getName()+"=="+key.getAge()+"======="+value);
        }

    }
}


집합 세트: 기초 반 장 삼 20 이사 22 취업 반 왕 오 21 조 육 23 은 HashMap 세트 를 이용 하여 이름 을 키 나이 로 데이터 로 저장 합 니 다.
외부 학급 은 키 값 으로 학생 을 저장 값 으로 한다.
  public static void main(String[] args) {
        HashMap studentHashMap = new HashMap<>();
        studentHashMap.put("  ",20);
        studentHashMap.put("  ",22);
        HashMap student1HashMap = new HashMap<>();
        student1HashMap.put("  ",21);
        student1HashMap.put("  ",23);
        HashMap> stringHashMapHashMap = new HashMap<>();
        stringHashMapHashMap.put("   ",studentHashMap);
        stringHashMapHashMap.put("   ",student1HashMap);

        Set>> entries = stringHashMapHashMap.entrySet();
        for (Map.Entry> entry : entries) {
            System.out.println(entry.getKey());
            HashMap value = entry.getValue();
            Set> entries1 = value.entrySet();
            for (Map.Entry stringIntegerEntry : entries1) {
                System.out.println("\t"+stringIntegerEntry.getKey()+"  "+stringIntegerEntry.getValue());
            }

        }


    }
}

좋은 웹페이지 즐겨찾기