java学习小结:set集合原理及特点
文章目录
- 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集合原理及特点相关推荐
- 黑马程序员--Java学习日记之集合(map集合和collections类)
-- Java培训.Android培训.iOS培训..Net培训.期待与您交流! --- 一.概述 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 在使用Collec ...
- 黑马程序员--Java学习日记之集合(collection类与list接口)及泛型概述
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一,集合概念 之前我们存储大量的对象,可以使用数组: 但数组有两个缺陷: 1. ...
- Java学习笔记3——集合框架
文章目录 1 集合的概念 2 Collection体系集合 Collection父接口 3 List接口与实现类 List接口 List实现类 ArrayList Vector LinkedList ...
- java学习总结之集合框架
前言 在JDK1.2之前,java是没有完整的集合框架的,只有一些简单的可以扩展的容器类,如Vector.Stack.Hashtable等,这些容器类它们解决了数组不能动态扩容和使用复杂的问题,到了J ...
- 【原】Java学习笔记028 - 集合
1 package cn.temptation; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 public class Samp ...
- java arrays.sort() c_5.4 (Java学习笔记)集合的排序(Collections.sort(),及Arrays.sort())...
1.Comparable接口 这个接口顾名思义就是用于排序的,如果要对某些对象进行排序,那么该对象所在的类必须实现 Comparabld接口.Comparable接口只有一个方法CompareTo() ...
- JAVA学习之常用集合List,Set,Map
常用的集合有List,Set,Map,这三个都是接口, 其中List,和Set继承于Collection 而Map是一个可以保存键值对的接口 Collection接口 Collection是最基本的集 ...
- 黑马Java学习笔记之-----集合框架
---------------------- android培训.java培训.期待与您交流! ---------------------- 一.概述: Java的集合类是一种特别有用的工具类,它可以 ...
- Java学习计划07:集合、泛型
目录 Collection List Set 泛型 Map Collections Collection collection是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的 ...
最新文章
- 元数据驱动的微服务架构(上)
- ubifs linux,ubifs使用方法
- OpenGL 绘制grass草的实例
- SDOI2016 生成魔咒
- 什么时候你应该用JSON Web Token
- flink check-point save-point理解
- 入门JavaScript?看懂这篇文章就够了!——Web前端系列学习笔记
- jfreeChart生成报表
- 全志F1C100S的BROM研究
- EditPlus怎么首行和末尾统一添加文本内容
- iOS12 系统 webView加载H5页面,反复点击网页中视频播放 退出视频全屏 闪退解决方式。
- 500以内的蓝牙降噪耳机哪款好?高性价比降噪蓝牙耳机分享
- 全国计算机等级考试试题练习,全国计算机等级考试一级练习试题
- 为PLOG增加了三套模板
- PetStore项目总结
- cmd实现快速粘贴复制
- 针对VMware vSphere的勒索病毒已经出现
- 直通车没有展现量?那你一定不知道这几点!_淘宝直通车
- 有类路由与无类路由的区别
- Tableau 第七天 多边形地图和背景地图:设置地理信息(自定义地图码导入、设置地图源)
热门文章
- 权威发布 | 芝诺数据入选2023年重庆市数字经济产业发展试点示范项目
- C/C++基础讲解(八十六)之游戏篇(解救人质游戏)
- sony+z3+android+6.0,索尼为Xperia Z3 Tablet Compact推送安卓6.0
- 【教程】只要姿势对,解释神经网络的数学过程跟玩似的
- 阿瑞斯病毒手游怎么在电脑上玩?阿瑞斯病毒安卓模拟器使用教程
- php操作mysql迅速插入上百万数据
- 基于MFC的肯德基快餐店的收银系统
- 华为软件研发面试题2 .
- ThinkPHP5.0之数据导出excel表格
- ffmpeg -ss参数 位置不同 截图速度不同