HashSet的remove方法(一道面试题)
1 public class CollectionTest {
2
3 @Test
4 public void test3(){
5 HashSet set = new HashSet();
6 Person p1 = new Person(1001,"AA");
7 Person p2 = new Person(1002,"BB");
8
9 set.add(p1);
10 set.add(p2);
11 System.out.println(set);
12 //输出2个值[person={1001,"AA"},person={1002,"BB"}]
13
14 p1.name = "CC";
15 set.remove(p1);
16 System.out.println(set);
17 //输出两个值[person={1001,"CC"},person={1001,"BB"}]
18
19 set.add(new Person(1001,"CC"));
20 System.out.println(set);
21 //输出三个值 [person={1001,"CC"},person={1002,"BB"},person={1001,"CC"]
22
23 set.add(new Person(1001,"AA"));
24 System.out.println(set);
25 //输出四个值 [person={1001,"CC"},person={1002,"BB"},person={1001,"CC",person={1001,"AA"]
26
27 }
28 }
Set类remove方法删除元素的原则:根据哈希值来删除元素
Set类的添加原则:首先比较哈希值,如果哈希值相同就使用equals()方法来判断,相同删掉,不同添加。
例如:
第二个输出:因为修改了p1的属性变量,使p1的哈希值发生改变。故删除元素时,大概率是删除不掉p1的值
第三个输出:添加了新的对象,用cc的属性来计算哈希值。之前cc是由aa改变的,地址没有发生变化。故cc的哈希地址存在,可以输出三个对象
第四个输出:添加了aa对象,和最开始的对象相同,哈希值相同。比较equals(),属性不同。故能添加aa对象,输出4个对象
HashSet的remove方法(一道面试题)的更多相关文章
- (转)从一道面试题彻底搞懂hashCode与equals的作用与区别及应当注意的细节
背景:学习java的基础知识,每次回顾,总会有不同的认识.该文系转载 最近去面试了几家公司,被问到hashCode的作用,虽然回答出来了,但是自己还是对hashCode和equals的作用一知半解的, ...
- 一道面试题与Java位操作 和 BitSet 库的使用
前一段时间在网上看到这样一道面试题: 有个老的手机短信程序,由于当时的手机CPU,内存都很烂.所以这个短信程序只能记住256条短信,多了就删了. 每个短信有个唯一的ID,在0到255之间.当然用户可能 ...
- ArrayList和HashSet的Contains()方法(转)
来源: ArrayList和HashSet的Contains()方法 笔试题: package com.champion.test.exam; import java.util.ArrayList; ...
- 关于Java类加载双亲委派机制的思考(附一道面试题)
预定义类加载器和双亲委派机制 JVM预定义的三种类型类加载器: 启动(Bootstrap)类加载器:是用本地代码实现的类装入器,它负责将 <Java_Runtime_Home>/lib下面 ...
- ArrayList调用remove方法需要注意的地方
ArrayList中有remove 方法和 removeAll方法, ArrayList中不仅继承了接口Collection中的remove方法,而且还扩展了remove方法. Collection中 ...
- 一道面试题比较synchronized和读写锁
一.科普定义 这篇博文的两个主角“synchronized”和“读写锁” 1)synchronized 这个同步关键字相信大家都用得比较多,在上一篇“多个线程之间共享数据的方式”中也详细列举他的应用, ...
- <转>一道面试题比较synchronized和读写锁
一.科普定义(原文:http://903497571.iteye.com/blog/1874752) 这篇博文的两个主角“synchronized”和“读写锁” 1)synchronized 这个同步 ...
- List<T>的IndexOf方法和Remove方法
Microsoft地址 List<T>的IndexOf()方法 如果T是值类型的,就按照比较值的方法从列表的第一个元素开始逐个匹配,如果T是引用类型,就比较引用是否相同 举例如下: cla ...
- Java中有关构造函数的一道笔试题解析
Java中有关构造函数的一道笔试题解析 1.详细题目例如以下 下列说法正确的有() A. class中的constructor不可省略 B. constructor必须与class同名,但方法不能与c ...
随机推荐
- ecshop增加调用字段问题汇总
一.ecshop文章列表页调用缩略图.网页描述等 打开includes/lib_article.php文件,大约在69行 添加 $arr[$article_id]['description'] = $ ...
- 前端常用场景总结CSS/JS/插件(实用篇更新中...)
<div class="box box1"> <span>垂直居中</span> </div> .box1{ display: ta ...
- 配置阿里云gradle
build.gradle buildscript { ext { springBootVersion = '1.5.15.BUILD-SNAPSHOT' } repositories { // mav ...
- linux 修改文件名称的三中方法
一:rename "old.html" "oldd.HTML" *html参数.有什么.改为什么 ,目标文件: 二 : #!/bin/sh Dirname=&q ...
- Jmeter通过正则表达式提取器提取响应结果数据
Jmeter进行接口测试常常会运到一个问题:就是第二个请求如何接收上一个请求响应中的参数.比如,现在个学生金币充值的接口,得先调用登录接口然后从返回里面复制一下sign的值,放到cookie里这样才能 ...
- Hbuilder 生成移动App资源升级包
建立文件夹www,将需要更新的文件放置在里面. 将manifest.json文件中version字段的版本修改为新编号. 在文件夹www外建立文件update.xml,内容如下: <?xml v ...
- [转载]ssh证书登录
转载链接 前言 本文基于实际Linux管理工作,实例讲解工作中使用ssh证书登录的实际流程,讲解ssh证书登录的配置原理,基于配置原理,解决实际工作中,windows下使用SecureCRT证书登录的 ...
- 鸿蒙内核源码分析(时间管理篇) | 谁是内核基本时间单位 | 百篇博客分析OpenHarmony源码 | v35.02
百篇博客系列篇.本篇为: v35.xx 鸿蒙内核源码分析(时间管理篇) | 谁是内核基本时间单位 | 51.c.h .o 本篇说清楚时间概念 读本篇之前建议先读鸿蒙内核源码分析(总目录)其他篇. 时间 ...
- P4240-毒瘤之神的考验【莫比乌斯反演,平衡规划】
正题 题目链接:https://www.luogu.com.cn/problem/P4240 题目大意 \(Q\)组数据给出\(n,m\)求 \[\sum_{i=1}^n\sum_{j=1}^m\va ...
- ServerManager.exe 0xc0000135 应用程序错误(Windows Server 2016、2019)
前言 将 Windows Server 2019或2016 .NET Framework移除. IIS卸载后,服务器管理器.控制面板部分功能.事件查看器等都无法正常开启. 解决办法 打开CMD,输入D ...