它们之间有什么区别?我知道
LinkedHashSet是HashSet的有序版本,可在所有元素上维护双链列表。当您关心迭代顺序时,请使用此类而不是HashSet。当您遍历HashSet时,顺序是不可预测的,而LinkedHashSet可让您按插入元素的顺序来遍历元素。
但是在LinkedHashSet的源代码中,只有HashSet的调用构造函数。那么双向链接的列表和插入顺序在哪里?
答案就在 其中构造 的LinkedHashSet
用途,构建基类:
public LinkedHashSet(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor, true); // <-- boolean dummy argument
}
...
public LinkedHashSet(int initialCapacity) {
super(initialCapacity, .75f, true); // <-- boolean dummy argument
}
...
public LinkedHashSet() {
super(16, .75f, true); // <-- boolean dummy argument
}
...
public LinkedHashSet(Collection<? extends E> c) {
super(Math.max(2*c.size(), 11), .75f, true); // <-- boolean dummy argument
addAll(c);
}
并且HashSet
描述了一个采用布尔参数的构造函数(的一个示例),看起来像这样:
/**
* Constructs a new, empty linked hash set. (This package private
* constructor is only used by LinkedHashSet.) The backing
* HashMap instance is a LinkedHashMap with the specified initial
* capacity and the specified load factor.
*
* @param initialCapacity the initial capacity of the hash map
* @param loadFactor the load factor of the hash map
* @param dummy ignored (distinguishes this
* constructor from other int, float constructor.)
* @throws IllegalArgumentException if the initial capacity is less
* than zero, or if the load factor is nonpositive
*/
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);
}
问题内容: 因此,我有一个自定义班级班级,该班级将有一组其他自定义班级的学生。因此它将看起来像这样: 现在,我将向集合中的学生添加和删除许多学生,并且还将改变已经在集合中的学生的许多私有字段。 问题:应该使用哪种数据结构来最好地实现此目的?由于我将更改set Student中Student对象的属性(从而更改哈希码),因此我应该改用ArrayList吗? 问题答案: 我应该使用哪种数据结构来最好地
问题内容: 我了解这是基于实现的,但是在您需要唯一的元素集时使用。那么,为什么在下一个代码中将相同的对象放入地图并进行设置时,两个集合的大小都等于1?地图大小不应该为2吗?因为如果两个集合的大小相等,那么使用这两个集合不会有任何区别。 输出为1和1。 问题答案: 该地图拥有唯一键。当您使用映射中存在的键进行调用时,该键下的对象将被新对象替换。因此大小为1。 两者之间的区别应该很明显: 在您存储键值
问题内容: 我有一个保证是不同的对象的集合(尤其是由唯一的整数ID索引)。我也确切地知道它们中有多少(并且数目不会改变),并且想知道Array是否比HashSet在存储/检索所述元素方面具有显着的性能优势。 在纸上,Array保证了恒定的时间插入(因为我提前知道了大小)和检索,但是HashSet的代码看起来更简洁并且增加了灵活性,所以我想知道是否会因为使用它而失去任何性能方面的信息,至少在理论上是
问题内容: 因为我有一个包含重复项的int数组的ArrayList,所以我想使用HashSet。不幸的是,我无法按需使用HashSet: 结果是: 有人可以告诉我我错了吗? 在此先感谢Dominique(java newbie) 问题答案: 数组不会在类中重写并实现,因此,只有当a1 == a2时,两个数组a1和a2 才被视为彼此相同,这在您的情况下是错误的。 如果使用s而不是数组,则将解决问题,
本文向大家介绍Java HashSet size()方法与示例,包括了Java HashSet size()方法与示例的使用技巧和注意事项,需要的朋友参考一下 HashSet类方法 size()方法在java.util包中可用。 size()方法用于返回此HashSet的大小(即,存在的元素数)。 size()方法是一种非静态方法,只能通过类对象进行访问,如果尝试使用类名访问该方法,则会收到错误消
本文向大家介绍Java HashSet remove()方法与示例,包括了Java HashSet remove()方法与示例的使用技巧和注意事项,需要的朋友参考一下 HashSet类方法 remove()方法在java.util包中可用。 remove()方法用于从存在的HashSet中移除给定的对象(ob)。 remove()方法是一种非静态方法,只能通过类对象访问,如果尝试使用类名称访问该方