博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TreeSet—————我们认知的集合
阅读量:5095 次
发布时间:2019-06-13

本文共 2249 字,大约阅读时间需要 7 分钟。

   我们可能都知道讲到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]]  

 完!!!

 

转载于:https://www.cnblogs.com/wth1129/p/5681988.html

你可能感兴趣的文章
Jenkins问题汇总
查看>>
QT 项目文件介绍
查看>>
tr69c 调试报错检查
查看>>
dl,dt,dd标签的使用
查看>>
Linux 查看文件 cat与 more 用法
查看>>
ZOJ 1244
查看>>
一次笔试题目附答案(sql答卷)
查看>>
【转】CSS Nuggest
查看>>
SQL2008"阻止保存要求重新创建表的更改"问题的解决
查看>>
52、[源码]-Spring源码总结
查看>>
Android开发中整合测试注意事项
查看>>
DevExpress ASP.NET v18.2新功能详解(三)
查看>>
查看linux系统版本命令
查看>>
20155302 课堂实践二
查看>>
JavaScript数值类型保留显示小数方法
查看>>
python--以1-31的数字作为结尾的列表?论英文好的重要性!
查看>>
解决Win7系统新建选项中无记事本问题
查看>>
nginx笔记---http配置
查看>>
升级到WP8必需知道的13个特性
查看>>
python学习笔记—— 多进程中的 孤儿进程和僵尸进程
查看>>