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<Integer> hashSet = new HashSet<Integer>();
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<Integer> 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<Integer> 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这种数据结构,更好的在项目中使用不可重复的数据结构。

最新文章

  1. Android开发学习—— Fragment
  2. PHP 生成验证码
  3. HTML5 自制本地网页视频播放器
  4. HDU 4932 贪心
  5. Java 高效检查一个数组中是否包含某个值
  6. android sim 卡短信读写
  7. 检测Windows程序的内存和资源泄漏之原生语言环境
  8. 我的web聊天之---序章
  9. java.lang.NoClassDefFoundError: javax/mail/Authenticator
  10. UOJ#465. 【HNOI2019】校园旅行 其他
  11. Java_异常处理
  12. 通过Docker发布RestAPI遇到的种种问题
  13. Oracle 《积累章》 根据身份证号码更新当前出生日期
  14. linux文件 特殊权限的使用
  15. TortoiseGit功能介绍
  16. ubuntu svn服务本地搭建使用
  17. 【Java并发编程】16、ReentrantReadWriteLock源码分析
  18. java中的SHA单向加密
  19. php 常用设计模式demo
  20. Spark应用HanLP对中文语料进行文本挖掘--聚类详解教程

热门文章

  1. ubuntu 登陆闪回
  2. 2019.3.13 Java的特性——继承
  3. 论文阅读 | Polygon-RNN:Annotating Object Instances with a Polygon-RNN
  4. PIE SDK打开HDF、NC数据
  5. linux命令之find
  6. fiter 编码
  7. POJ 2570 Fiber Network
  8. c#特性类 Attribute
  9. linux_api之进程环境
  10. vs2012 使用方法汇总