java中定义HashSet时能否指定其容量?若能,如何定义?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中定义HashSet时能否指定其容量?若能,如何定义?相关的知识,希望对你有一定的参考价值。
构造方法摘要HashSet()HashSet(int initialCapacity)
构造一个新的空 set,其底层 HashMap 实例具有指定的初始容量和默认的加载因子(0.75)。
HashSet hs=new HashSet(1);
。所以可见 HashSet类,创建对象的时候是可以的制定容量的大小的 ,期中第二个就具有这个工功能。 参考技术A 1、首先回答是肯定的,这个就像数组一样,能指定存多少条记录
2、但是这个指定存多少条在Java中用map或者集合感觉并没有多少用
3、因为Java这个集合或者map解决了Java中数组需要指定大小初始化的尴尬,因此并不需要再进行一个指定大小的初始化了,有点画蛇添足 参考技术B new HashSet(size)追问
HashSet hs=new HashSet(1);
System.out.println(hs.size());
那为什么以上程序输出的值是0,而不是1?
指定容量是最大容量,没有添加元素当然输出的是0了
本回答被提问者采纳 参考技术C 指定大小当然非常有用,当数据量较大的时候,在存放对象的时候回多次扩容,每次扩容需要新建数组病重新hash散列,如果预先能够知道存放数据的量,并定义好大小,性能上有很大的提高。Java 之 Set 源码分析
一、HashSet
构造方法:
HashSet() :构造一个新的空 set,其底层 HashMap 实例的默认初始容量是 16,加载因子是 0.75
源码:
二、LinkedHashSet
构造方法:
LinkedHashSet(): 构造一个带默认初始容量 (16) 和加载因子 (0.75) 的新空链接哈希 set
LinkedHashSet(int initialCapacity) :构造一个带指定初始容量和默认加载因子 (0.75) 的新空链接哈希 set
源码:
三、TreeSet
构造方法:
TreeSet() :构造一个新的空 set,该 set 根据其元素的自然顺序进行排序
TreeSet(Comparator<? super E> comparator) :构造一个新的空 TreeSet,它根据指定比较器进行排序
源码:
总结:
1、Set 的内部实现其实是一个 Map,即HashSet的内部实现是一个HashMap,TreeSet的内部实现是一个TreeMap,LinkedHashSet的内部实现是一个LinkedHashMap。
2、但是 Set 中只有一个元素,又是怎么变成(key,value)的呢?
以 HashSet 的 add 方法为例:
原来是,把添加到 Set 中的元素作为内部实现 map 的 key,然后用一个常量对象 PRESENT 对象,作为value。
所有的 HashSet 共用同一个PRESENT对象,所有的 TreeSet 共用同一个 PRESENT对象,所有的 LinkedHashSet 共用同一个 PRESENT 对象。
这是因为 Set 的元素不可重复和 Map 的 key 不可重复有相同特点。Map 有一个方法 keySet() 可以返回所有 key。
以上是关于java中定义HashSet时能否指定其容量?若能,如何定义?的主要内容,如果未能解决你的问题,请参考以下文章