Set 平常的应用场景 (个人目前为止) 对我来说不是很多
为了全面了解集合框架 还是看下(按照这个趋势 我估计 下个星期 可以看jur包了,不过 看juc 包 肯定 会写很多先导知识)
-
构造方法
public HashSet() { map = new HashMap<>(); }
呵呵 原来如此 HashSet 看来就是 HahMap 的小弟
-增 add
private static final Object PRESENT = new Object();
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
add 看起来也很简单的样子
-
查
public boolean contains(Object o) { return map.containsKey(o); }
public boolean isEmpty() { return map.isEmpty(); }
public void clear() { map.clear(); }
-
删 remove removeAll
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}
public boolean removeAll(Collection<?> c) {
Objects.requireNonNull(c);
boolean modified = false;
if (size() > c.size()) {
for (Iterator<?> i = c.iterator(); i.hasNext(); )
modified |= remove(i.next());
} else {
for (Iterator<?> i = iterator(); i.hasNext(); ) {
if (c.contains(i.next())) {
i.remove();
modified = true;
}
}
}
return modified;
}
removeAll 是迭代器 遍历删除 实在remove 基础上做出来的
-遍历
public Iterator<E> iterator() {
return map.keySet().iterator();
}
HashSet 基本 是 HashMap 的基础上做出来的 基本就是 把HashMap 的Key 当槽位
迭代器就是调用的 HashMap 的Key 的 Iterator 由此 可知道 HashSet 是无序的
它是由HashMap实现的,不保证元素的顺序,而且HashSet允许使用 null 元素。
玛莎噶 等等 好像我发现了一个异类
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
嗯 这个 HashSet 的构造早 没有 被修饰 ,就是不能把别人调用 那么调用的到底是谁呢?
let me see
linkedHashSet就是这货 LinkedHashSet 现在略略关系 (总结 )
- LinkedHashMap 继承了 HashMap
- HashSet 使用了HashMap
- LinkedHashSet 继承 HashSet 使用的是 LinkedHashMap
- set 的原理就是把值放在HashMap 的Key 上
LinkedHashSet里面没什么方法 四个构造 还有一个 spliterator() 是1.8 出来的 值得一提的是
1.8 的集合框架 都多了 几个方法 这个方法到专题 讲1.8 特性我们再提
学习 HashSet 和 LinkedHashSet 基本是温习了一遍 HashMap 课件HashMap 设计有多优越
网友评论