问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java为什么对象集合元素存在却不能完整输出

发布网友 发布时间:2024-02-12 07:39

我来回答

2个回答

热心网友 时间:2024-02-12 10:18

源码HashSet.add:
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}

源码HashMap.put:
public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());
int i = indexFor(hash, table.length);
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}

modCount++;
addEntry(hash, key, value, i);
return null;
}

由此可见,HashSet是根据放入object的hashcode做判断,然后遍历查找是否有hashcode值和键相同的元素。若存在则返回已有元素,不在entry里再添加
这段:
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
若不存在,返回null,并添加:
addEntry(hash, key, value, i);
return null;
然后你就能根据return map.put(e, PRESENT)==null; 这个得知你是否添加成功,换句话说就是是否存在。true添加成功不存在,false添加失败存在

因为只有继承了Object的类才具有hashcode,所以基本类型如int都是由他们的包装类
另外加一点泛型的知识,若你的Set用到了泛型,E则代表泛型类型。否则为Object

热心网友 时间:2024-02-12 10:19

代码都没有你在问什么

热心网友 时间:2024-02-12 10:19

源码HashSet.add:
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}

源码HashMap.put:
public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());
int i = indexFor(hash, table.length);
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}

modCount++;
addEntry(hash, key, value, i);
return null;
}

由此可见,HashSet是根据放入object的hashcode做判断,然后遍历查找是否有hashcode值和键相同的元素。若存在则返回已有元素,不在entry里再添加
这段:
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
若不存在,返回null,并添加:
addEntry(hash, key, value, i);
return null;
然后你就能根据return map.put(e, PRESENT)==null; 这个得知你是否添加成功,换句话说就是是否存在。true添加成功不存在,false添加失败存在

因为只有继承了Object的类才具有hashcode,所以基本类型如int都是由他们的包装类
另外加一点泛型的知识,若你的Set用到了泛型,E则代表泛型类型。否则为Object

热心网友 时间:2024-02-12 10:19

代码都没有你在问什么
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
干货| 如何利用PPT绘制手绘图像(内含视频教学)。 小米Mix2s开发者选项的设置与应用指南(探索小米Mix2s开发者选项)_百度... 我今年41岁女,我想问一买哪种养老保险更合算,可以一次买吗?要多少... 我们家有营业执照。我现在41岁了。养老保险如何来买?一年,交多少钱? 搅拌桩的两喷两搅怎么理解 ...上关于一喷二搅、二喷二搅、二喷三搅、二喷四搅的具体做法 两搅两喷与四搅四喷的区别 三轴搅拌桩两搅四喷是什么意思 梦幻西游将军令怎么解绑 EXCEL表,求值? java,集合框架中为什么输出的键值value 是编码 不是自定义的字符串(有... 怎么二次修改(详细步骤) 橘子发霉后绿色的霉菌有毒吗 华为如何二次修改? 实木框架布艺沙发选购技巧 布艺、木质家具的选购技巧 和田市有哪些自然风光类的景点值得推荐? 实木床和布艺床如何选择 成都西北中学地址 47le5300开机显示几秒后黑屏 我是去年买的LG42LE5300-CA的液晶电视,黑屏了是什么原因??? 怎么一年改两次 班主任工作的首要任务是( )A.钻研教材B.掌握课程标准C.了解和研究学生... 龙文区生态环境局执法大队是什么编制 抗疫优秀辅警多长时间能拿到嘉奖 武汉理工大学保研政策2023年? 辅警四级嘉奖相当于什么 周大福金融是真的吗? 周大福是骗子公司吗? 新汶矿务局第二中学和新汶中学是一个高中吗?汶城中学和这两个中学近吗... 台式电脑没有音响,怎么放声音? 北京生育保险所需手续 清蒸鱼怎么坐 戴春林鸭蛋粉养颜吗 怎么改第二次最简单的方法 ...吗,60岁,我看说明书上说,年老体弱者慎用,是因为什么呢? 怎么通过一件事描写老师 木升子尺寸口诀 有山东枣庄到铜仁南站的高铁吗有山东,枣庄到铜仁南站的高铁吗?_百度知 ... 坐火车从遵义到山东枣庄学院的最佳路线! 谢谢! 临沂开车到铜仁中流砥柱怎么走 枣庄至云南盈江多少公里 贵阳自驾到枣庄台儿庄战史陈列馆推荐线路 二附小的校歌曲的歌词 结婚纪念日送什么颜色的玫瑰 福安师范附小的校歌:《渴望飞翔》,歌在哪里能找到?歌词有吗?_百度知 ... 临桂二中在哪个位置 上海远香湖位于哪儿 大连最好的初中是哪所? 爸爸不在家,前天县城里和爸爸关系很好的李叔叔来,好像帮我家办什么...