文章目录

  • Set集合
  • 一、HashSet
  • 二、LinkedHashSet
  • 三、TreeSet
    • 自然排序
    • 定制排序

Set集合

Set集合是collection的另一个子接口,包括三个实现类:HashSet、LinkedHashSet、TreeSet,存入和取出元素的顺序不一定相同(和list不同),并且元素不能相同,可以是null,但只可能有一个null。

一、HashSet

底层原理是Hash表实现的,存储元素的顺序不是按照存入的顺序,而是按照哈希值来存取数据(无序),哈希值通过hashcode方法获取。判断两个元素是否相等时,首先比较两个元素的哈希值是否相等,再比较equals方法,如果返回的是true,则两个元素对象相等,视为同一个元素。所以,HashSet添加一个元素时,当哈希值相同,equals为false时,添加的元素在相同的哈希值下顺延,即存一列(放在同一个哈希桶中);当哈希值不同,equals返回true时,也会存入到不同哈希值下并添加成功;都相同时则视为同一元素,添加失败。同时,线程是不安全的。

二、LinkedHashSet

LinkedHashSet是HashSet的子类,也是根据hashcode的值来存储数据,不允许元素重复,使用时直接调用HashSet的方法,但是由于是基于LinkedHashMap实现的,以双向链表来维护插入元素的顺序,所以看起来是按照插入的顺序来存放的。

三、TreeSet

TreeSet底层采用的是红黑树存储数据,可以确保元素有排序的状态,所以此结构是有序的,查询速度较list更快。排序方式包括自然排序和定制排序。

自然排序

TreeSet 会调用集合元素的 compareTo(Object obj) 方法来比较元素之间的大小关系,然后将集合元素按升序(默认情况)排列
如Integer和String对象都可以进行默认的排序,但如果要添加一个元素,那么该元素的的类必须实现Comparable接口和compareTo方法。

定制排序

若元素所属的类没有实现Comparable接口,或不希望按照升序、降序的方式排列元素或按照其它属性大小进行排序,则可以使用定制排序,通过Comparator接口来实现,需要重写compare(T o1,T o2)方法,即利用int compare(T o1,T o2)方法,比较o1和o2的大小:如果方法返回正整数,则表示o1大于o2;如果返回0,表示相等;返回负整数,表示o1小于o2。

java学习小结:set集合原理及特点相关推荐

  1. 黑马程序员--Java学习日记之集合(map集合和collections类)

    -- Java培训.Android培训.iOS培训..Net培训.期待与您交流! ---  一.概述 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 在使用Collec ...

  2. 黑马程序员--Java学习日记之集合(collection类与list接口)及泛型概述

     ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一,集合概念   之前我们存储大量的对象,可以使用数组:   但数组有两个缺陷:   1. ...

  3. Java学习笔记3——集合框架

    文章目录 1 集合的概念 2 Collection体系集合 Collection父接口 3 List接口与实现类 List接口 List实现类 ArrayList Vector LinkedList ...

  4. java学习总结之集合框架

    前言 在JDK1.2之前,java是没有完整的集合框架的,只有一些简单的可以扩展的容器类,如Vector.Stack.Hashtable等,这些容器类它们解决了数组不能动态扩容和使用复杂的问题,到了J ...

  5. 【原】Java学习笔记028 - 集合

    1 package cn.temptation; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 public class Samp ...

  6. java arrays.sort() c_5.4 (Java学习笔记)集合的排序(Collections.sort(),及Arrays.sort())...

    1.Comparable接口 这个接口顾名思义就是用于排序的,如果要对某些对象进行排序,那么该对象所在的类必须实现 Comparabld接口.Comparable接口只有一个方法CompareTo() ...

  7. JAVA学习之常用集合List,Set,Map

    常用的集合有List,Set,Map,这三个都是接口, 其中List,和Set继承于Collection 而Map是一个可以保存键值对的接口 Collection接口 Collection是最基本的集 ...

  8. 黑马Java学习笔记之-----集合框架

    ---------------------- android培训.java培训.期待与您交流! ---------------------- 一.概述: Java的集合类是一种特别有用的工具类,它可以 ...

  9. Java学习计划07:集合、泛型

    目录 Collection List Set 泛型 Map Collections Collection collection是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的 ...

最新文章

  1. 元数据驱动的微服务架构(上)
  2. ubifs linux,ubifs使用方法
  3. OpenGL 绘制grass草的实例
  4. SDOI2016 生成魔咒
  5. 什么时候你应该用JSON Web Token
  6. flink check-point save-point理解
  7. 入门JavaScript?看懂这篇文章就够了!——Web前端系列学习笔记
  8. jfreeChart生成报表
  9. 全志F1C100S的BROM研究
  10. EditPlus怎么首行和末尾统一添加文本内容
  11. iOS12 系统 webView加载H5页面,反复点击网页中视频播放 退出视频全屏 闪退解决方式。
  12. 500以内的蓝牙降噪耳机哪款好?高性价比降噪蓝牙耳机分享
  13. 全国计算机等级考试试题练习,全国计算机等级考试一级练习试题
  14. 为PLOG增加了三套模板
  15. PetStore项目总结
  16. cmd实现快速粘贴复制
  17. 针对VMware vSphere的勒索病毒已经出现
  18. 直通车没有展现量?那你一定不知道这几点!_淘宝直通车
  19. 有类路由与无类路由的区别
  20. Tableau 第七天 多边形地图和背景地图:设置地理信息(自定义地图码导入、设置地图源)

热门文章

  1. 权威发布 | 芝诺数据入选2023年重庆市数字经济产业发展试点示范项目
  2. C/C++基础讲解(八十六)之游戏篇(解救人质游戏)
  3. sony+z3+android+6.0,索尼为Xperia Z3 Tablet Compact推送安卓6.0
  4. 【教程】只要姿势对,解释神经网络的数学过程跟玩似的
  5. 阿瑞斯病毒手游怎么在电脑上玩?阿瑞斯病毒安卓模拟器使用教程
  6. php操作mysql迅速插入上百万数据
  7. 基于MFC的肯德基快餐店的收银系统
  8. 华为软件研发面试题2 .
  9. ThinkPHP5.0之数据导出excel表格
  10. ffmpeg -ss参数 位置不同 截图速度不同