LinkedHashSet 如何保证迭代顺序 谁看过LinkedHashSet的源码,我怎么没看出来它跟HashSet的实现有任何不同 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, java.io.Serializable { private static final long serialVersionUID = -2851667679971038690L; public LinkedHashSet(int initialCapacity, float loadFactor) { super(initialCapacity, loadFactor, true); } public LinkedHashSet(int initialCapacity) { super(initialCapacity, .75f, true); } public LinkedHashSet() { super(16, .75f, true); } public LinkedHashSet(Collection<? extends E> c) { super(Math.max(2*c.size(), 11), .75f, true); addAll(c); }} 在实际使用中有很大的区别,HashSet迭代的顺序是不固定的,LinkedHashSet的迭代顺序是固定的 咋回事呢?个人感觉Set不是不保证迭代顺序的嘛,LinkedHashSet本质上讲依旧是个Set莫非就是一个true保证了迭代顺序??? HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor); }LinkedHashSet始终调用LinkedHashMap,也就是说它跟LinkedHashMap差不多,而Map有迭代循序 你仔细看它调用的父类构造函数,实际上调用的是HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);}它的顺序由LinkedHashMap保证的(LinkedHashMap中的Entry有前一个和后一个的引用) 很奇怪是吧,答案其实是在他的父类 HashSet里面:HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor); }通过LinkedHashMap 来实现排序的。至于为什么HashSet却没有排序的功能,那就要注意到这个构造方法是default的,只有ui包能访问到,外界是不能调用这个构筑器的,为什么这样设计还有待研究啊。 Hibenate many-to-one 甄选条件 在tomcat admin中配置数据源不生效 resin ssl 问题 ibatis中sqlMapConfig的settings设置问题 在线等 【求助】IIS6 500 error原因 linux 搭建vsftpd服务器 URL与Socket问题? PetStore & structs 数据库连接怎么出了问题》求助!! too much point shared with friends! select标签怎么才能实现鼠标移动到某个option上就显示该option值,大家积极点!!! Eclipse+tomcat5.5问题
extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable { private static final long serialVersionUID = -2851667679971038690L; public LinkedHashSet(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor, true);
} public LinkedHashSet(int initialCapacity) {
super(initialCapacity, .75f, true);
} public LinkedHashSet() {
super(16, .75f, true);
} public LinkedHashSet(Collection<? extends E> c) {
super(Math.max(2*c.size(), 11), .75f, true);
addAll(c);
}
}
莫非就是一个true保证了迭代顺序???
map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);
}
LinkedHashSet始终调用LinkedHashMap,也就是说它跟LinkedHashMap差不多,而Map有迭代循序
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);
}它的顺序由LinkedHashMap保证的(LinkedHashMap中的Entry有前一个和后一个的引用)
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);
}
通过LinkedHashMap 来实现排序的。至于为什么HashSet却没有排序的功能,那就要注意到这个构造方法是default的,只有ui包能访问到,外界是不能调用这个构筑器的,为什么这样设计还有待研究啊。