/-----Collection接口:单列集合、用来存储一个一个对象
*      /-----set接口:储存无序的,不可重复的数据
*          /-----HashSet接口:储存无序的,不可重复的数据
*              /-----LinkedHashSet:作为HashSet的子类;遍历其内部数据时,可以按照添加的顺序遍历
*                      对于频繁的遍历操作,linkedHashSet效率高于HashSet
*          /-----TreeSet:可以按照添加对象的指定属性,进行排序。
*
一、  Set:储存无序的、不可重复的数据
*  以HashSet为例说明:
*  1、无序性:不等于随机性。储存的数据在底层数组中并非按照数组索引的顺序添加,而是根据数据的哈希值添加
*
*  2、不可重复性,保证添加的元素按照equals()判断时,不能返回true。即相同的元素只能添加一个
       1、Set接口中没有额外定义的新方法,使用的都是Collection中声明过的方法。
*
*      2、要求:向Set中添加的数据,其所在的类一定要重写hashCode()和equals()方法
*
二、添加元素的过程
*      我们直接想HashSet中添加元素a,首先调用元素a所在类的hashCode()方法,计算a的哈希值
*      此哈希值接着通过某种算法计算出在HashSet底层数组中的存放位置(即为索引位置),判断
*      数组位置上是否已有元素:
*          如果此位置上没有其他元素,则元素a添加成功。 --->情况1
*          如果此位置上有其他元素b(或以链表的形式存在多个元素),则比较元素a与元素b的hash值:
*              如果hash值不相同,则元素a添加成功。--->情况2
*              如果hash值相同,进而需要调用元素a所在类的equals()方法:
*                  equals()返回true,则元素a添加失败
*                  equals()返回false,则元素a添加成功。--->情况3
*
*      对于添加成功的情况2和情况3而言:元素a与已经存在指定索引位置上数据以链表的方法存储
*      jdk 7:元素a放到数组中,指向原来的元素
*      jdk 8:原来的元素放到数组中,指向元素a
*      总结:7上8下
*
*      hashSet底层:数组+链表结构
TreeSet
* 1、向TreeSet中添加的数据,要求是相同类的对象。
* 2、两种排序方式:自然排序(实现Comparable接口)和  定制排序(Comparator)
*
* 3、自然排序中,比较两个对象是否相同的标准为:compareTo()返回0,而不是equals()。
* 4、定制排序中,比较两个对象是否相同的标准为:compare()返回0,而不是equals()。

JavaSE--Set接口相关推荐

  1. 【JavaSE】接口

    前言: 作者简介:爱吃大白菜1132 人生格言:纸上得来终觉浅,绝知此事要躬行   如果文章知识点有错误的地方不吝赐教,和大家一起学习,一起进步!   如果觉得博主文章还不错的话,希望三连支持! 目录 ...

  2. java基础[接口]

    接口作用:将两个不同的东西连接起来,让他们共同去工作! 具体类:定义某一具体的事物: 抽象类:定义某一类不同种的事物: 接口:定义不同类型的不同种事物,但是却有共同的行为,注重事物的行为,而不是事物的 ...

  3. 接口的基础语法和接口在开发中的作用2021-07-23java学习日记

    Javase进阶 接口的语法和接口的作用 p499-p516 关键词: 接口    implements    面向抽象编程    OCP开闭原则 接口的基础语法 1.接口也是一种引用数据类型,编译之 ...

  4. Java学习lesson 14

    *数据结构 *栈结构(先进后出,后进先出) 特点:进栈的方式叫压栈 出栈的方式叫弹栈 *队列(先进先出) *数组(查询快,增删慢) *链表结构 有很多链子将多个节点连接起来 每一个节点(数据):数据域 ...

  5. Android序列化与反序列化

    1. 什么是java序列化,如何实现java序列化? 我们有时候将一个java对象变成字节流的形式传出去或者从一个字节流中恢复成一个java对象,例如,要将java对象存储到硬盘或者传送给网络上的其他 ...

  6. 视频专辑:JAVA语言入门视频教程

    为什么80%的码农都做不了架构师?>>>    专辑:JAVA语言入门视频教程 简介:该视频专辑是java的入门教程,适合初学者学习java,讲的也非常容易懂,希望能给想学习java ...

  7. 转 Java知识——精华总结

    一.java概述与基础知识 1.何为编程? 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程.  为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路. ...

  8. Java基础教程-05-面向对象

    Java基础教程-05-面向对象 1. 面向过程和面向对象解释 1.1 面向过程 1.1.1 简述 我们回想一下, 前面我们完成一个需求的步骤是怎样的? 首先是搞清楚我们要做什么. 然后在分析怎么做. ...

  9. 编程资料 -C# 多线程

    编程资料 - 多线程 C#多线程编程实例实战 作者: 刘弹 www.ASPCool.com 时间:2003-5-17 上午 10:24:05 阅读次数:10996 单个写入程序/多个阅读程序在.Net ...

  10. 编程资料 -C# 多线程 1

    编程资料 - 多线程 C#多线程编程实例实战 作者: 刘弹 www.ASPCool.com 时间:2003-5-17 上午 10:24:05 阅读次数:10996 单个写入程序/多个阅读程序在.Net ...

最新文章

  1. cocos2dx andoroid切换后台后资源重载
  2. 解密谷歌机器学习工程最佳实践——机器学习43条军规 翻译 2017年09月19日 10:54:58 98310 本文是对Rules of Machine Learning: Best Practice
  3. 都说程序员加班很严重,来听听国外的程序员怎么说
  4. python ctypes 回调函数_Python ctypes中具有自定义类型的回调
  5. Qt Creator在3D编辑器中工作
  6. Matcher类的简单使用
  7. java疯狂讲义内存分配_java疯狂讲义学习:面向对象(上)
  8. /usr/bin/ld: skipping incompatible -转
  9. python时间序列预测不连续怎么办_手把手教你用Python处理非平稳时间序列(附代码)...
  10. docker mysql域名访问_Docker中配置MySQL并实现远程访问
  11. aix升级openssh_AIX6.1上源码编译升级openssh6.6p1
  12. 云运维拓扑图_云平台网络拓扑图
  13. android为什么总是闪退怎么办,手机应用老是闪退该怎么办?
  14. 如何提升公众号的阅读量?提高公众号阅读量的方法介绍
  15. Staf/Stax安装
  16. pycharm pep8 代码格式化
  17. cup过高是什么意思_CPU占用过高怎么办? 每日一答
  18. android 有sim卡,有光亦有暗:Android Q将更方便运营商锁定手机SIM卡
  19. Python零基础入门(五)
  20. 2020届校招-老虎证券-Windows开发工程师笔试题

热门文章

  1. JavaScript聊天器
  2. RabbitMQ宕机后,消息100%不会丢失吗
  3. Docker学习——DockerFile
  4. c#: 线程状态和管理之线程的休眠、挂起和中断
  5. Unity Windows PC获得唯一标识符
  6. python 沪江_Python基础篇 -- 字符串
  7. Shell攻关之运算符
  8. Java虚拟机-JVM
  9. 微信小程序实现简单定位功能
  10. MAP一个KEY多个value处理方法