博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试3——java集合类总结(Set)
阅读量:5310 次
发布时间:2019-06-14

本文共 1432 字,大约阅读时间需要 4 分钟。

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
c) { map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16)); addAll(c); }

具体的源码分析 

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

 

 

 

总结面试问题:

 

转载于:https://www.cnblogs.com/znn93/p/9314923.html

你可能感兴趣的文章
读《我是一只IT小小鸟》有感
查看>>
linux中系统管理指令
查看>>
JS常用各种正则表达式
查看>>
Java 定时任务
查看>>
二分查找的平均查找长度详解【转】
查看>>
读阿里巴巴Java开发手册v1.2.0之编程规约有感【架构篇】
查看>>
基于page的简单页面推送技术
查看>>
js 日期格式化函数(可自定义)
查看>>
git报错:failed to push some refs to 'git@github.com:JiangXiaoLiang1988/CustomerHandl
查看>>
Eureka高可用,节点均出现在unavailable-replicas下
查看>>
day 21 - 1 包,异常处理
查看>>
机器学习等知识--- map/reduce, python 读json数据。。。
查看>>
字符串编码
查看>>
预编译语句(Prepared Statements)介绍,以MySQL为例
查看>>
内联汇编实现 memcpy 和 memset
查看>>
css学习笔记
查看>>
关键字--union
查看>>
iOS开发者账号详细介绍
查看>>
Shell入门
查看>>
运算符与格式输出输入4
查看>>