• TreeSet—————我们认知的集合


       我们可能都知道讲到TreeSet,就必然想到HashSet,它们都是集合中的一种,我们想来看一下集合框架吧

     这是基本的框架简化图,从图中我们可以看出TreeSet集合和HashSet集合都实现了Set接口,那么我们来说一说Set接口吧。

    Set接口

    Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false
    Set判断两个对象相同不是使用==运算符,而是根据equals方法。也就是说,只要两个对象用equals方法比较返回true,Set就不会接受这两个对象。

    HashSet
    HashSet有以下特点
     不能保证元素的排列顺序,顺序有可能发生变化
     不是同步的
     集合元素可以是null,但只能放入一个null。

    TreeSet
    1.TreeSet是Set子接口SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方式,自然排序定制排序,其中自然排序为默认的排序方式。向TreeSet中加入的应该是同一个类的对象。
    2.TreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0

    TreeSet的性能比HashSet差但是我们在需要排序的时候可以用TreeSet ,因为他是自然排序也就是升序。

    import java.util.Iterator;
    
    import java.util.TreeSet;
    
     
    
    public class TreeSet_t { 
    
       public static void main(String[] args) {
    
     
    
          TreeSet tree = new TreeSet();
    
          Students s1 = new Students("西瓜", 12, "男");
    
          Students s2 = new Students("苹果", 11, "女");     
    
          Students s3 = new Students("冬瓜", 15, "女");
    
          Students s4 = new Students("菠萝", 10, "男");
    
     
    
          tree.add(s1);
    
          tree.add(s2);
    
          tree.add(s3);
    
          tree.add(s4);
    
     
    
          //  迭代器的方式输出
    
          Iterator it = tree.iterator();
    
          while (it.hasNext()) {
    
            System.out.println(it.next());
    
          }
    
         
    
          tree.removeAll(tree);
    
          if(tree.isEmpty()){
    
            System.out.println("已经全部删除!");
    
          }    
    
       }
    
    
    }

    3、TreeSet中的元素必须实现Comparable接口并重写compareTo()方法,TreeSet判断元素是否重复、以及确定元素的顺序靠的都是这个方法;(这条性质比较重要,如果读者对TreeSet内部机制比较熟悉的话这条性质应该不难理解)

    4.向TreeSet中添加元素时,首先按照compareTo()进行比较,一旦返回0,虽然仅是两个对象属性值相同,但是程序会认为这两个对象是相同的,进而后一个对象不能添加进来。

    5.TreeSet先执行compareto方法,再执行hashcode和equals方法,所以compareTo()与hashcode()与equals()三者保持一致

    package lianxi2;
    
    import java.util.Set;
    import java.util.TreeSet;
    
    import org.junit.Test;
    
    public class TestTreeSet {
    @Test
      public void testTreeSet(){
         Set set = new TreeSet();
          set.add(new Student(1001,"huhu"));         //重写了equals和hashcode方法
          set.add(new Student(1003,"gx"));
          set.add(new Student(1007,"safd"));        
          set.add(new Student(1005,"gas"));
          set.add(new Student(1005,"cxz"));        
          System.out.println(set.size());
          System.out.println(set);
      }
    }

    结果:

    5
    [Student [id=1001, name=huhu], Student [id=1003, name=gx], Student [id=1005, name=cxz], Student [id=1005, name=gas], Student [id=1007, name=safd]]  

     完!!!

  • 相关阅读:
    递归函数底层原理浅析
    lambda expression & mutable
    命令mv
    printf的参数
    程序结构之静态本地变量
    汇编.align指令
    程序结构之全局变量
    命令touch
    更改gcc默认版本,实现gcc版本升降级
    命令chmod
  • 原文地址:https://www.cnblogs.com/wth1129/p/5681988.html
Copyright © 2020-2023  润新知