共同学习Java源代码-数据结构-LinkedHashMap(四)
来源:互联网 发布:window10 stc isp软件 编辑:程序博客网 时间:2024/06/14 13:29
Set<K> ks = keySet;
if (ks == null) {
ks = new LinkedKeySet();
keySet = ks;
}
return ks;
}
这个是获取keySet方法 就是判断keySet属性是否为空 如果为空就创建出一个LinkedKeySet对象 LinkedKeySet对象的代码在下面
final class LinkedKeySet extends AbstractSet<K> {
public final int size() { return size; }
public final void clear() { LinkedHashMap.this.clear(); }
public final Iterator<K> iterator() {
return new LinkedKeyIterator();
}
public final boolean contains(Object o) { return containsKey(o); }
public final boolean remove(Object key) {
return removeNode(hash(key), key, null, false, true) != null;
}
public final Spliterator<K> spliterator() {
return Spliterators.spliterator(this, Spliterator.SIZED |
Spliterator.ORDERED |
Spliterator.DISTINCT);
}
public final void forEach(Consumer<? super K> action) {
if (action == null)
throw new NullPointerException();
int mc = modCount;
for (LinkedHashMap.Entry<K,V> e = head; e != null; e = e.after)
action.accept(e.key);
if (modCount != mc)
throw new ConcurrentModificationException();
}
}
其中涉及java9新特性的两个方法就暂时不讲解 其他的与之前讲的大同小异 不多说了
public Collection<V> values() {
Collection<V> vs = values;
if (vs == null) {
vs = new LinkedValues();
values = vs;
}
return vs;
}
final class LinkedValues extends AbstractCollection<V> {
public final int size() { return size; }
public final void clear() { LinkedHashMap.this.clear(); }
public final Iterator<V> iterator() {
return new LinkedValueIterator();
}
public final boolean contains(Object o) { return containsValue(o); }
public final Spliterator<V> spliterator() {
return Spliterators.spliterator(this, Spliterator.SIZED |
Spliterator.ORDERED);
}
public final void forEach(Consumer<? super V> action) {
if (action == null)
throw new NullPointerException();
int mc = modCount;
for (LinkedHashMap.Entry<K,V> e = head; e != null; e = e.after)
action.accept(e.value);
if (modCount != mc)
throw new ConcurrentModificationException();
}
}
这些就是获取value集合的方法以及 LinkedValues的实现类 还是大同小异 不多说了
public Set<Map.Entry<K,V>> entrySet() {
Set<Map.Entry<K,V>> es;
return (es = entrySet) == null ? (entrySet = new LinkedEntrySet()) : es;
}
final class LinkedEntrySet extends AbstractSet<Map.Entry<K,V>> {
public final int size() { return size; }
public final void clear() { LinkedHashMap.this.clear(); }
public final Iterator<Map.Entry<K,V>> iterator() {
return new LinkedEntryIterator();
}
public final boolean contains(Object o) {
if (!(o instanceof Map.Entry))
return false;
Map.Entry<?,?> e = (Map.Entry<?,?>) o;
Object key = e.getKey();
Node<K,V> candidate = getNode(hash(key), key);
return candidate != null && candidate.equals(e);
}
public final boolean remove(Object o) {
if (o instanceof Map.Entry) {
Map.Entry<?,?> e = (Map.Entry<?,?>) o;
Object key = e.getKey();
Object value = e.getValue();
return removeNode(hash(key), key, value, true, true) != null;
}
return false;
}
public final Spliterator<Map.Entry<K,V>> spliterator() {
return Spliterators.spliterator(this, Spliterator.SIZED |
Spliterator.ORDERED |
Spliterator.DISTINCT);
}
public final void forEach(Consumer<? super Map.Entry<K,V>> action) {
if (action == null)
throw new NullPointerException();
int mc = modCount;
for (LinkedHashMap.Entry<K,V> e = head; e != null; e = e.after)
action.accept(e);
if (modCount != mc)
throw new ConcurrentModificationException();
}
}
这个是获取LinkedEntrySet的方法以及LinkedEntrySet的实现 还是不多说了
- 共同学习Java源代码-数据结构-LinkedHashMap(四)
- 共同学习Java源代码-数据结构-LinkedHashMap(一)
- 共同学习Java源代码-数据结构-LinkedHashMap(二)
- 共同学习Java源代码-数据结构-LinkedHashMap(三)
- 共同学习Java源代码-数据结构-LinkedHashMap(五)
- 共同学习Java源代码-数据结构-HashMap(四)
- 共同学习Java源代码--数据结构--AbstractList抽象类(四)
- 共同学习Java源代码--数据结构--ArrayList类(四)
- 共同学习Java源代码--数据结构--LinkedList类(四)
- 共同学习Java源代码-数据结构-AbstractMap抽象类(四)
- 共同学习Java源代码--数据结构--开篇语
- 共同学习Java源代码--数据结构--Collection接口
- 共同学习Java源代码--数据结构--List接口
- 共同学习Java源代码--数据结构--AbstractSequentialList类
- 共同学习Java源代码--数据结构--Set接口
- 共同学习Java源代码-数据结构-LinkedHashSet
- 共同学习Java源代码-数据结构-TreeSet(一)
- 共同学习Java源代码-数据结构-TreeSet(二)
- 优越感使人短视,进而愚蠢
- 无向图的建立及深度优先遍历
- python简单地实现几个小代码
- java基本数据结构汇总
- laravel 报错:Namespace declaration statement has to be the very first statement in the script
- 共同学习Java源代码-数据结构-LinkedHashMap(四)
- Informix数据库的存储过程
- window下配置eclipse+android SDK+ADT的开发环境
- iOS 获取定位
- 工作中的问题记录1
- tensorflow基础(三)——张量和会话
- 接口
- boost库安装编译指南
- linux环境搭建nginx+tomcat7(配置篇)