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

时间:2021-07-05 19:25:15

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

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

 这是基本的框架简化图,从图中我们可以看出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]]  

 完!!!