关注
示例代码 public class Main {
public static void main(String[] args){
Map<String,Object> map = new HashMap<>();
map.put("a",1);
map.put("b",2);
map.put("c",3);
Collection<Object> values = map.values();
System.out.println(values);
}
} 通过debug发现,调用 map.values() 时进入了HashMap的方法 public Collection<V> values() {
Collection<V> vs = values; if (vs == null) {
vs = new Values(); values = vs;
} return vs;
} 第一次执行时,values为null,会进行创建 final class Values extends AbstractCollection<V> {
public final int size() { return size; }
public final void clear() { HashMap.this.clear(); }
public final Iterator<V> iterator() { return new ValueIterator(); }
public final boolean contains(Object o) { return containsValue(o); }
public final Spliterator<V> spliterator() {
return new ValueSpliterator<>(HashMap.this, 0, -1, 0, 0);
}
public final void forEach(Consumer<? super V> action) {
Node<K,V>[] tab;
if (action == null)
throw new NullPointerException();
if (size > 0 && (tab = table) != null) {
int mc = modCount;
for (int i = 0; i < tab.length; ++i) {
for (Node<K,V> e = tab[i]; e != null; e = e.next)
action.accept(e.value);
}
if (modCount != mc)
throw new ConcurrentModificationException();
}
}
} vs = new Values(); 执行过后vs就有值了,一直没想明白,卡在这里了。
查看原帖
3 5
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 面试问题记录 #
47317次浏览 709人参与
# 你遇到过哪些神仙同事 #
70576次浏览 635人参与
# 京东TGT #
42469次浏览 163人参与
# 我的2024小目标 #
57742次浏览 384人参与
# 实习生应该准时下班吗 #
200569次浏览 1310人参与
# 百度工作体验 #
203936次浏览 1903人参与
# 工作一周年分享 #
17769次浏览 109人参与
# 面试经验谈 #
31580次浏览 437人参与
# 面试吐槽bot #
9757次浏览 66人参与
# 入职第五天,你被拉进了几个工作群 #
16580次浏览 80人参与
# 假如我穿越到了妈妈的18岁 #
4610次浏览 38人参与
# 提前批过来人的忠告 #
99009次浏览 1095人参与
# 国企和大厂硬件兄弟怎么选? #
119826次浏览 1655人参与
# 机械人,你的第一份感谢信是谁给的 #
25531次浏览 296人参与
# 贝壳求职进展汇总 #
19844次浏览 140人参与
# 请用你的专业向妈妈表白 #
9033次浏览 77人参与
# 零跑求职进展汇总 #
4302次浏览 17人参与
# 硬件人秋招的第一个offer #
69162次浏览 1085人参与
# 职场新人生存指南 #
345475次浏览 7357人参与
# 对妈妈没说出口的话 #
22072次浏览 451人参与
# 异地恋该为对方跳槽吗 #
32675次浏览 157人参与