关注
示例代码 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
牛客热帖
更多
正在热议
更多
# 在大厂上班是一种什么样的体验 #
12453次浏览 168人参与
# 你的mentor是什么样的人? #
51178次浏览 723人参与
# 程序员找工作至少要刷多少题? #
21309次浏览 272人参与
# 我和mentor的爱恨情仇 #
106307次浏览 950人参与
# 论秋招对个人心气的改变 #
13547次浏览 191人参与
# 机械人避雷的岗位/公司 #
44174次浏览 309人参与
# 为了减少AI幻觉,你注入过哪些设定? #
6114次浏览 183人参与
# 秋招落幕,你是He or Be #
54245次浏览 618人参与
# 校招第一份工作你干了多久? #
136664次浏览 597人参与
# 高薪高压 vs 低薪wlb,你怎么选? #
47413次浏览 290人参与
# 设计人如何选offer #
189726次浏览 868人参与
# 考公VS就业,你怎么选? #
91995次浏览 507人参与
# 职场上哪些行为很加分? #
322603次浏览 3603人参与
# 你的秋招进行到哪一步了 #
2531015次浏览 23253人参与
# 牛客AI体验站 #
7803次浏览 210人参与
# 机械人还在等华为开奖吗? #
312134次浏览 1582人参与
# 秋招投递记录 #
380939次浏览 3204人参与
# 12306一秒售罄,你抢到回家的票了吗? #
2324次浏览 52人参与
# 我现在比当时_,你想录用我吗 #
9470次浏览 129人参与
# 重来一次,我还会选择这个专业吗 #
411302次浏览 3898人参与