Java集合02——三分钟了解你必须掌握的两个Set
上一篇文章我们说到了 List ,本章开始,我们将继续讲解Set相关的知识。关注公众号「Java面典」了解更多 Java 知识点。
Set 是一个无重复对象的集合类。值的重复与否是根据对象的 hashCode 来判断的,如果想要让两个不同的对象视为相等的,就必须覆盖 Object 的 hashCode 方法和 equals 方法。
HashSet
- HashSet 是无序 的 Set 对象,由 HashMap 实现的,不保证元素的顺序性;
- HashSet 是非同步的。如果需要使用多线程操作 HashSet ,可以使用Collections.synchronizedSet 方法来“包装” Set。
Set s = Collections.synchronizedSet(new HashSet(...));
- 带集合构造参数 。
public HashSet(Collection<? extends E> c) {
// (int) (c.size()/.75f) + 1 —— HashMap 的加载因子是 0.75
// -- 当HashMap的“阈值”(阈值=HashMap总的大小*加载因子) < “HashMap实际大小”时,
// -- HashMap 容量要翻番。
// 16 —— HashMap的总的大小,必须是2的指数倍
map = new HashMap<E,Object>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}
TreeSet
- TreeSet 是有序的 Set 对象,通过 TreeMap 实现的,利用二叉树的原理,保证集合内的顺序;
- String 和 Integer 都可以进行默认的 TreeSet 排序,自定义对象必须实现 Comparable 接口,并且覆写相应的 compareTo()函数,才能进行 TreeSet 排序;
- TreeSet 是非同步的;
- TreeSet 为基本操作(add、remove 和 contains)提供受保证的 log(n) 时间开销。
Java集合系列推荐
Java集合02——三分钟了解你必须掌握的两个Set的更多相关文章
- 【由浅入深理解java集合】(三)——集合 List
第一篇文章中介绍了List集合的一些通用知识.本篇文章将集中介绍List集合相比Collection接口增加的一些重要功能以及List集合的两个重要子类ArrayList及LinkedList. 一. ...
- Java集合系列(三):HashSet、LinkedHashSet、TreeSet的使用方法及区别
本篇博客主要讲解Set接口的三个实现类HashSet.LinkedHashSet.TreeSet的使用方法以及三者之间的区别. 注意:本文中代码使用的JDK版本为1.8.0_191 1. HashSe ...
- 面渣逆袭:Java集合连环三十问
大家好,我是老三.上期发布了一篇:面渣逆袭:HashMap追魂二十三问,反响很好! 围观群众纷纷表示 不写,是不可能不写的,只有卷才能维持了生活这样子. 当然,我写的这一系列,不是背诵版,是理解版,很 ...
- Java集合框架(三)
Map Map集合:该集合存储键值对,一对一对的往里存,而且要保证键的唯一性. Map |------HashTable:底层是哈希表数据结构,不可以存入null键null值.该集合是线程同步的.J ...
- java 集合框架(三)Collection
一.概述 Collection是集合框架的根接口.不同的集合具有不同的特性,比如有的集合可以有重复元素,有的不可以,有的可以排序,有的不可排序,如此等等,而Collection作为集合的根接口,它规范 ...
- java集合的三种遍历方式
import java.util.ArrayList; import java.util.Collection;import java.util.Iterator;public class Home ...
- java 集合(三)List接口
package cn.sasa.demo1; import java.util.ArrayList; import java.util.LinkedList; import java.util.Lis ...
- 【Java集合系列三】Vector-Stack解析
2017-07-29 12:59:14 一.简介 1.Vector继承关系 2.Vector类扩容 Vector类的实现和ArrayList极其相似,都使用数组存储元素,但是扩容策略不一样,Array ...
- Java集合篇三:Vector
package com.test.collection; import java.util.Vector; public class MyVector { /** * @param args */ p ...
随机推荐
- [Linux] Ubuntu 配置nfs
安装NFS Server: 1. 执行命令 "$ sudo apt-get install nfs-kernel-server",安装nfs server 端 2. 创建需要用来分 ...
- 【Linux_Shell 脚本编程学习知识点、判断传入参数是否是 整数】
判断脚本传入的参数是否是整数 常用的几种方法 完整Shell 脚本如下: #!/bin/sh ##################################################### ...
- Qt 获取当前时间
时间日期是经常遇到的数据类型,Qt 中时间日期类型的类如下: QTime:时间数据类型,仅表示时间,如11:12:13. QDate:日期数据类型,仅表示日期,如2011-11-11. QDateTi ...
- Java日期时间API系列12-----Jdk8中java.time包中的...
package com.xkzhangsan.time.test; import java.time.LocalDateTime;import java.util.Date; import com.x ...
- SpringMVC在使用过程中的错误
HTTP Status 500 - Request processing failed; nested exception is org.springframework.validation.Bind ...
- HTML5图片预览 放大
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- python对csv读写
1.csv文件读取 with open("C:\\Users\\Administrator\\Desktop\\test.csv", 'r', encoding='utf-8') ...
- Java 去掉字符串中的重复数据
有一组字符串比如 北京,北京,上海,上海,上海,武汉-------->要得到 北京,上海,武汉 怎么去掉里面重复的字符串? function DelRepetStr(String ...
- B站实战第三天
B站实战第三天 用了两天多的时间才把B站页面的头部写完,今天来写头部下面的导航栏部分和轮播图一些模块. 因为还没学js,轮播图部分用swiper来实现. 今天首先复习的知识点是弹性盒模型. 弹性盒模型 ...
- ReadHub项目Kotlin版开发指南(三、MVP架构)
ReadHub项目Kotlin版转换指南(一.环境搭建) ReadHub项目Kotlin版转换指南(二.数据库和网络请求) ReadHub项目Kotlin版转换指南(三.MVP架构) Android ...