Java集合框架之Set接口浅析

一、java.util.Set接口综述:

  这里只对Set接口做一简单综述,其具体实现类的分析,朋友们可关注我后续的博文

1.1Set接口简介

  • java.util.set是Java集合框架体系中的重要成员
  • Set接口的意义是,含有相等的元素。相等由集合内元素的equals方法决定。Set继承自Collection接口,可是事实上其所含的方法和Collection接口一样。和List不同的是,Set内部实现是基于Map的,所以Set取值时不保证数据和存入的时候顺序一致,并且不允许空值,不允许重复值。
  • Set的特点,主要由其内部的Map决定的,Set就类似于Map的一个马甲
  • Set主要有2个实现方式,一个是TreeSet,另一个是HashSet
  • Set是对数学上集的抽象,Set中不包含重复的元素.如何界定是否是重复元素?Set最多可含一个null元素;对于任意的非null元素e1和e2,都满足e1.equals(e2)==false.
  • Object.hashcode()的约定:
    • 在程序的一次执行中,无论何时在同一个java对象上重复调用hashcode(),都必须一致地返回同一个整数值,并不像Object.equals()那样提供Object是否被修改了的信息,但这个整数值不必在同一个应用程序的多次运行之间保持一致.
    • 如果两个Object通过equals()判断是相等的,那么,在这两个Object上调用hashcode()必返回相同的值.
    • 如果两个Object通过equals()判断是不相等的,那么,并不要求这两个Object.hashcode()返回不同的整数值.
  • 对象的相等性
    • 引用到堆上同一个对象的两个引用是相等的。如果对两个引用调用hashCode方法,会得到相同的结果,如果对象所属的类没有覆盖Object的hashCode方法的话,hashCode会返回每个对象特有的序号(java是依据对象的内存地址计算出的此序号),所以两个不同的对象的hashCode值是不可能相等的。
    • 如果想要让两个不同的Person对象视为相等的,就必须覆盖Object继下来的hashCode方法和equals方法,因为Object  hashCode方法返回的是该对象的内存地址,所以必须重写hashCode方法,才能保证两个不同的对象具有相同的hashCode,同时也需要两个不同对象比较equals方法会返回true

1.2Set体系结构:

  从类图能够看出,AbstractSet接口继承于AbstractCollection。它是Set的抽象实现,可是其除了添加了equals和hashcode方法,其它方法均继承而来(removeall方法外)。

二、Set方法摘要:

方法摘要
 boolean add(E e)
          如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。
 boolean addAll(Collection<? extends E> c)

          如果 set 中没有指定 collection 中的所有元素,则将其添加到此 set 中(可选操作)。
 void clear()

          移除此 set 中的所有元素(可选操作)。
 boolean contains(Object o)

          如果 set 包含指定的元素,则返回 true
 boolean containsAll(Collection<?> c)

          如果此 set 包含指定 collection 的所有元素,则返回 true
 boolean equals(Object o)

          比较指定对象与此 set 的相等性。
 int hashCode()

          返回 set 的哈希码值。
 boolean isEmpty()

          如果 set 不包含元素,则返回 true
 Iterator<E> iterator()

          返回在此 set 中的元素上进行迭代的迭代器。
 boolean remove(Object o)

          如果 set 中存在指定的元素,则将其移除(可选操作)。
 boolean removeAll(Collection<?> c)

          移除 set 中那些包含在指定 collection 中的元素(可选操作)。
 boolean retainAll(Collection<?> c)

          仅保留 set 中那些包含在指定 collection 中的元素(可选操作)。
 int size()

          返回 set 中的元素数(其容量)。
 Object[] toArray()

          返回一个包含 set 中所有元素的数组。
<T>
T[]
toArray(T[] a)

          返回一个包含此 set 中所有元素的数组;返回数组的运行时类型是指定数组的类型。

三、Set和List的区别:

  • Set 接口实例存储的是无序的,不重复的数据。List 接口实例存储的是有序的,可以重复的元素。

  • Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>

  • List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector>

参考:

  https://www.cnblogs.com/zfyouxi/p/5184247.html

  http://blog.csdn.net/qq_33642117/article/details/52040345

  http://www.runoob.com/java/java-collections.html

最新文章

  1. 代理模式(Proxy pattern)
  2. 44、NLP的其他分词功能测试
  3. unity 实现物体破碎效果的一些方法
  4. 一个简单的Java web服务器实现
  5. GridView控件隐藏列
  6. warning MSB3391
  7. SAP保存操作记录CDHDR和CDPOS表
  8. 【推荐】对 Linux 用户非常有用的 60 个命令(由浅入深)
  9. IE filter &amp; z-index bug
  10. 使用Convert 类和Parse方法将字符串转换为数值类型
  11. ios点击产生波纹效果
  12. kindeditor使用方法
  13. Java7中的ForkJoin并发框架初探(中)——JDK中实现简要分析
  14. Servlet中Response对象应用1(输出简单文字、实现文件下载)
  15. Token认证来龙去脉
  16. 【Flask】 Jinja2模板语言
  17. mybatis下载地址(所有版本)
  18. 不同eclipse版本的git库使用
  19. stm32GPIO的8种工作模式
  20. python爬虫 403 Forbidden 解决方法

热门文章

  1. 彻底搞懂Python切片操作
  2. React Hooks 深入系列 —— 设计模式
  3. [ PyQt入门教程 ] PyQt5信号与槽
  4. Windows的 IIS 部署django项目
  5. 5.Go-封装、继承、接口、多态和断言
  6. MATLAB使用过程中遇到的问题(持续更新)
  7. React-Native之打包发布(Android)
  8. Amazon S3
  9. MQ服务器端和客户端通信浅谈
  10. Web很脆弱,SQL注入要了解