Set 集合

和List一样,继承Collection接口,不同的是Set中不能包含重复的元素,无序,并且最多只能允许一个null值。Set常见的实现类有:HashSet、TreeSet和LinkedHashSet。

1.HashSet

HashSet是一个没有重复元素的集合。它是由HashMap实现的,不能保证元素的顺序,重要的是HashSet允许使用null元素。

HashSet是非同步的。如果多个线程同时访问一个hashset,而其中至少一个线程修改了该hashset,那么它必须保持外部同步。

Set s = Collections.synchronizedSet(new HashSet(...)); 

构造方法:

1)无参构造方法

通过hashset的构造函数可以看出创建hashset实际上就是创建一个hashmap。但是无参构造方法创建的hashset将会是一个容量为16,装载因子为0.75的hashmap。

public HashSet() {
map = new HashMap<>();
}

2)有参构造方法

通过有参的构造方法可以指定内部hashmap的容量和装载因子

public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<>(initialCapacity, loadFactor);
}
public HashSet(int initialCapacity) {
map = new HashMap<>(initialCapacity);
}

3)构造方法的参数是一个集合

如果参数是一个集合,那么hashset会把传入集合的大小除以0.75再加上1与16进行比较,取较大的那个值作为hashmap的容量。

public HashSet(Collection<? extends E> c) {
map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}

具体的源码分析 https://blog.csdn.net/guoweimelon/article/details/50804799

hashset对存入的元素有一些要求,为了保证存入元素的唯一性,存储在hashset中的元素必须重写hashcode()和equals()方法,重写hashcode方法是为了根据元素自身的特性确定元素的hash值,进而确定元素在hashset中的位置,而重写equals方法是为了解决哈希冲突,当两个元素通过hashcode计算出的hash值相同的时候就发生了hash冲突,这个时候,根据元素的equals方法来判断两个元素是否相同,如果两个元素的内容相同,那么重复的元素便不会存储;如果内容不同,就会通过一个单向链表来存储发送hash冲突的元素,在Java8中,若谷冲突的次数超过来8次,就会将单向链表转化为红黑树,从而将最坏的情况下的性能从O(n)提高到O(logn)。

2.TreeSet

是一个有序的集合,是一个set集合。继承abstractset,实现了navigableset,cloneable,serializable接口。

源码分析

3.LinkedHashSet

总结面试问题:

面试3——java集合类总结(Set)的更多相关文章

  1. 面试3——java集合类总结(List)

    1.集合类 数组:可以存储对象,也可以存储基本数据类型,但是一次只能存储一种类型,且长度一定,不可改变. 集合:只能存储对象,长度可变,可以存储不同类型的对象.Java集合类主要有三种:set,lis ...

  2. 面试3——java集合类面试题总结

    1.总结一下啊hashmap和hashtable的知识点? 1)关于hashmap的说法 HashMap实际上是一个“链表散列”的数据结构,在jdk1.8中添加了红黑树.HashMap底层结构是一个数 ...

  3. 面试3——java集合类总结(Map)

    1.概述: Java 中的map集合使用键值对(key-value)来保持数据,其中值(value)可以重复,键(key)必须唯一,但最多只能有一个key为空,它的主要实现类有HashMap.Hash ...

  4. BAT面试必备——Java 集合类

    本文首发于我的个人博客:尾尾部落 1. Iterator接口 Iterator接口,这是一个用于遍历集合中元素的接口,主要包含hashNext(),next(),remove()三种方法.它的一个子接 ...

  5. Java集合类常见面试知识点总结

    微信公众号[Java技术江湖]一位阿里Java工程师的技术小站 Java集合类学习总结 这篇总结是基于之前博客内容的一个整理和回顾. 这里先简单地总结一下,更多详细内容请参考我的专栏:深入浅出Java ...

  6. JAVA集合类(大公司面试喜欢问的)

     分类: 核心JAVA(11)  版权声明:本文为博主原创文章,未经博主允许不得转载. 看了一些所谓大公司的Java面试问题,发现对于JAVA集合类的使用都比较看重似的,而自己在这方面还真的是所真甚少 ...

  7. Java集合类--温习笔记

    最近面试发现自己的知识框架有好多问题.明明脑子里知道这个知识点,流程原理也都明白,可就是说不好,不知道是自己表达技能没点,还是确实是自己基础有问题.不管了,再巩固下基础知识总是没错的,反正最近空闲时间 ...

  8. 大公司最喜欢问的Java集合类面试题

    看了一些所谓大公司的JAVA面试问题,发现对于JAVA集合类的使用都比较看重似的,而自己在这方面还真的是所真甚少,抽空也学习学习吧. java.util包中包含了一系列重要的集合类,而对于集合类,主要 ...

  9. 一招破解 Java 集合类面试题

    今日招式:Java集合类面试题 Java集合类绝对是我们的老朋友了,Java技术江湖里,谁人不知,谁人不晓,它的使用率非常高,使用难度却也不大,这也导致了很多人对它不屑一顾,殊不知其中却暗藏玄机,今天 ...

随机推荐

  1. [十八]JavaIO之FileReader 和 FileWriter

    简介 FileReader FileWriter 都是提供操作文件的便捷类 这两个类的实现非常的简单 原理 回忆下之前的InputStreamReader和OutputStreamWriter Inp ...

  2. 痞子衡嵌入式:常用的数据差错控制技术(2)- 奇偶校验(Parity Check)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式里数据差错控制技术-奇偶校验. 在系列第一篇文章里,痞子衡给大家介绍了最简单的校验法-重复校验,该校验法实现简单,检错纠错能力都还不 ...

  3. 使用DataSet與DataAdapter對數據庫進行操作

    1.定義連接字符串 var source = "server=(local); integrated security=SSPI; database=test"; var conn ...

  4. 【微服务目录】.NET Core 微服务介绍

    介绍: 写这篇文章有多方面的原因,第一当然是为了以后自己可以随时翻阅,第二也算是一种积累吧.因为有些东西你弄个之后,过了很长时间不用,可能会有些忘却,但是你因为以前弄个吧,有不是那种小白,需要去找示例 ...

  5. [日常] nginx记录post数据

    1.使用log_format指令来更改日志格式,该指令只能放在http{}段 log_format  日志名  '日志内容'; server { access_log /var/log/nginx/d ...

  6. Java开发笔记(七十四)内存溢出的两种错误

    前面介绍的几种异常,其实都存在这样那样的逻辑问题,属于程序员的编码手误.还有一大类系统错误,表面上看不出什么问题,但是程序仍然运行不下去,兹举二例说明.第一个例子且看下列的测试代码: // 测试内存溢 ...

  7. 安装PackageControl

    安装PackageControl 1,到PackageControl官网,查找到相应sublime text的版本安装信息, sublime text 3: import urllib.request ...

  8. location.origin兼容IE

    if (window["context"] == undefined) { if (!window.location.origin) { window.location.origi ...

  9. 2019Java查漏补缺(三)

    1.为什么这个public的类的类名必须和文件名相同    是为了方便虚拟机在相应的路径中找到相应的类所对应的字节码文件    2.java8 的一些新特性:     3: 数据库隔离级别 隔离级别 ...

  10. PM过程能力成熟度2级

    当PM意识到自己不再是程序员后,就会在项目管理方面,逐渐达到过程能力成熟度1级.尽管这种亲身经历会带给PM管理的信心,但从项目的层面来说,整体还是混沌的,PM在经历过1级的阶段性胜利后,将面临更多的问 ...