博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java数据结构之Set学习总结
阅读量:6231 次
发布时间:2019-06-22

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

前言:

   前面介绍了Java的数据结构List、Map,今天抽空学习总结一下另一种数据结构Set。

Set介绍

   Set相对于List、Map是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。

特点:

  •  它不允许出现重复元素;
  • 不保证和政集合中元素的顺序
  • 允许包含值为null的元素,但最多只能有一个null元素

Set是一个接口,实例化Set可以采用下面的方式:

  • HashSet: HashSet类按照哈希算法来存取集合中的对象,存取速度比较快 
  • TreeSet :TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序 

Set的基本操作:

  •  boolean add(Object o)   :向集合中加入一个对象的引用
  • void clear()                        :删除集合中所有的对象,即不再持有这些对象的引用
  • boolean isEmpty()           :判断集合是否为空
  • boolean contains(Object o): 判断集合中是否持有特定对象的引用
  • Iterartor iterator()              : 返回一个Iterator对象,可以用来遍历集合中的元素
  • boolean remove(Object o):从集合中删除一个对象的引用
  • int size()                               :返回集合中元素的数目
  • Object[] toArray()                 :返回一个数组,该数组中包括集合中的所有元素

Set的使用

添加数据

Set
hashSet = new HashSet
(); hashSet.add(3); hashSet.add(2); hashSet.add(5); hashSet.add(1); //模拟添加一个重复数据 hashSet.add(2); Log.e(TAG,"set hashSet :"+hashSet+" size : "+hashSet.size()); Set
treeSet = new TreeSet<>(); treeSet.add(3); treeSet.add(2); treeSet.add(5); treeSet.add(1); Log.e(TAG,"set treeSet :"+treeSet +" size : "+treeSet.size());

运行结果:

 通过运行结果可以看出,Set是不可重复的,TreeSet是有序的,HashSet是无序的。

TreeSet实现排序默认是升序,想要实现自定义排序可以通过传进去一个Comparator或者TreeSet的添加对象实现Comparator接口。

Set遍历

for循环方式

for (Integer integer :hashSet){            Log.e(TAG,"set integer :"+integer);   }

迭代器方式

Iterator
iterator =hashSet.iterator();while (iterator.hasNext()){ Integer integer=iterator.next(); Log.e(TAG,"set integer :"+integer); }

知识扩展:

 最近在阿里java开发手册上看到了这句话:Map/Set 的 key 为自定义对象时,必须重写 hashCode 和 equals。这里Set集合中放入的是String类型,假如我们放入一个自己定义的类实例的时候,比如Person类实例,这时候我们要自己重新hashcode和equal方法,用自己的关键字段来重写,因为当使用HashSet时,hashCode()方法就会得到调用,判断已经存储在集合中的对象的hash code值是否与增加的对象的hash code值一致;如果不一致,直接加进去;如果一致,再进行equals方法的比较,equals方法如果返回true,表示对象已经加进去了,就不会再增加新的对象,否则加进去

总结:

 主要重新熟悉一下Map这种数据结构,更好的在项目中使用不可重复的数据结构。

 

转载地址:http://snqna.baihongyu.com/

你可能感兴趣的文章
[转]Linq 如何实现 in 与 not in
查看>>
怎样修复“Windows/System32/Config/System中文件丢失或损坏”故障
查看>>
C#:控制台程序调用中间库创建窗体
查看>>
运用Android ROM Manager应用安装ClockworkMod Recovery的详细教程
查看>>
selenium-Locating Elements
查看>>
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(44)-工作流设计-设计表单...
查看>>
如何定时备份远程mysql数据库
查看>>
【行业翘楚】井田云:化解线上线下冲突让鱼与熊掌皆得
查看>>
System.currentTimeMillis();
查看>>
keil中的存储模式
查看>>
jQuery EasyUI API 中文文档 - Panel面板
查看>>
egrep 查找IP
查看>>
从子集和问题的动态规划解看判断问题与优化问题的区别与联系
查看>>
Effective C++:条款28:避免返回 handles 指向对象内部成员
查看>>
gulp-notify处理报错----gulp系列(二)
查看>>
浅谈OCR之Onenote 2010
查看>>
Android SDK打包
查看>>
yii url美化 urlManager组件
查看>>
数据库(表)的逻辑备份与恢复
查看>>
SQL SERVER 2005允许自定义聚合函数-表中字符串分组连接
查看>>