共同学习Java源代码-数据结构-LinkedHashMap(三)
2017-12-12 16:36
357 查看
public LinkedHashMap(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor);
accessOrder = false;
}
public LinkedHashMap(int initialCapacity) {
super(initialCapacity);
accessOrder = false;
}
public LinkedHashMap() {
super();
accessOrder = false;
}
public LinkedHashMap(Map<? extends K, ? extends V> m) {
super();
accessOrder = false;
putMapEntries(m, false);
}
public LinkedHashMap(int initialCapacity,
float loadFactor,
boolean accessOrder) {
super(initialCapacity, loadFactor);
this.accessOrder = accessOrder;
}
这几个都是构造方法 不多说了
public boolean containsValue(Object value) {
for (LinkedHashMap.Entry<K,V> e = head; e != null; e = e.after) {
V v = e.value;
if (v == value || (value != null && value.equals(v)))
return true;
}
return false;
}
这个方法是判断是否包含值的方法 就是从head元素开始遍历 具体很简单就不说了
public V get(Object key) {
Node<K,V> e;
if ((e = getNode(hash(key), key)) == null)
return null;
if (accessOrder)
afterNodeAccess(e);
return e.value;
}
public V getOrDefault(Object key, V defaultValue) {
Node<K,V> e;
if ((e = getNode(hash(key), key)) == null)
return defaultValue;
if (accessOrder)
afterNodeAccess(e);
return e.value;
}
这两个是获取值的方法 和父类不同的地方在于增加了afterNodeAccess的逻辑 就是accessOrder为true 对节点操作了一次 就将节点放到链表尾部 也就是按照操作顺序排列元素
public void clear() {
super.clear();
head = tail = null;
}
这个是清除的方法 调用了父类的方法 并将head和tail都清空
protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
return false;
}
这个是删除最古老的元素的方法 直接返回false
super(initialCapacity, loadFactor);
accessOrder = false;
}
public LinkedHashMap(int initialCapacity) {
super(initialCapacity);
accessOrder = false;
}
public LinkedHashMap() {
super();
accessOrder = false;
}
public LinkedHashMap(Map<? extends K, ? extends V> m) {
super();
accessOrder = false;
putMapEntries(m, false);
}
public LinkedHashMap(int initialCapacity,
float loadFactor,
boolean accessOrder) {
super(initialCapacity, loadFactor);
this.accessOrder = accessOrder;
}
这几个都是构造方法 不多说了
public boolean containsValue(Object value) {
for (LinkedHashMap.Entry<K,V> e = head; e != null; e = e.after) {
V v = e.value;
if (v == value || (value != null && value.equals(v)))
return true;
}
return false;
}
这个方法是判断是否包含值的方法 就是从head元素开始遍历 具体很简单就不说了
public V get(Object key) {
Node<K,V> e;
if ((e = getNode(hash(key), key)) == null)
return null;
if (accessOrder)
afterNodeAccess(e);
return e.value;
}
public V getOrDefault(Object key, V defaultValue) {
Node<K,V> e;
if ((e = getNode(hash(key), key)) == null)
return defaultValue;
if (accessOrder)
afterNodeAccess(e);
return e.value;
}
这两个是获取值的方法 和父类不同的地方在于增加了afterNodeAccess的逻辑 就是accessOrder为true 对节点操作了一次 就将节点放到链表尾部 也就是按照操作顺序排列元素
public void clear() {
super.clear();
head = tail = null;
}
这个是清除的方法 调用了父类的方法 并将head和tail都清空
protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
return false;
}
这个是删除最古老的元素的方法 直接返回false
相关文章推荐
- 共同学习Java源代码-数据结构-LinkedHashMap(五)
- 共同学习Java源代码-数据结构-LinkedHashMap(四)
- 共同学习Java源代码-数据结构-LinkedHashMap(一)
- 共同学习Java源代码--数据结构--LinkedList类(八)
- 共同学习Java源代码--数据结构--开篇语
- 共同学习Java源代码--数据结构--AbstractList抽象类(二)
- 共同学习Java源代码--数据结构--LinkedList类(六)
- 共同学习Java源代码--数据结构--AbstractList抽象类(六)
- 共同学习Java源代码--数据结构--ArrayList类(四)
- 共同学习Java源代码--数据结构--List接口
- 共同学习Java源代码--数据结构--ArrayList类(七)
- 共同学习Java源代码--数据结构--ArrayList类(五)
- 共同学习Java源代码--数据结构--LinkedList类(一)
- 共同学习Java源代码--数据结构--ArrayList类(一)
- 共同学习Java源代码--数据结构--AbstractList抽象类(三)
- 共同学习Java源代码--数据结构--AbstractCollection抽象类(一)
- 共同学习Java源代码--数据结构--AbstractSequentialList类
- 共同学习Java源代码--数据结构--Set接口
- 共同学习Java源代码--数据结构--AbstractList抽象类(四)
- 共同学习Java源代码--数据结构--LinkedList类(七)