Java Set集合 HashSet
时间:2022-06-18
本文章向大家介绍Java Set集合 HashSet,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
HashSet存储对象,应重写hashCode()和equals()方法,以便更好控制集合中的这些元素
类Person
public class Person {
//eclipse source 下自动生成hasCode()和equals 勾选num作为唯一标识
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + num;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (num != other.num)
return false;
return true;
}
int num;
int age;
String name;
//创建构造方法
public Person(int num, int age, String name) {
super();
this.num = num;
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "Person [num=" + num + ", age=" + age + ", name=" + name + "]";
}
}
我们知道,hashSet中按照hashCode的值存放元素,下面向Set中加入元素,第一个数字为关键字,
如果关键自被修改会怎么样?
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class guess{
public static void main(String[] args) {
Set set = new HashSet();
Person person1 = new Person(1, 10, "阿强");
Person person2 = new Person(2, 10, "阿强");
Person person3 = new Person(3, 10, "阿强");
set.add(person1);
set.add(person2);
set.add(person3);
set.add(null);//HashSet可以加入null
person1.num = 5;
set.remove(person1);
//此时删除的是num为5的hashCode,而原来存储位置是num为1的hashCode.所以删除不起作用
set.add(person1);
//此时会添加person1,虽然集合不存在重复元素
//在重复插入数据时,改变了num,hash值不同,就认定为不同的hash元素
Person person4 = new Person(1, 10, "阿强");
set.add(person4);
//person1已经与新对象person4的num不相同了,可以增加
System.out.println(set.size());
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
可以看作以下三种情况:
1.直接可以插入
2.hash值相同且判读相等,不会保存
3.同一hash值判断不相等,虽然是相同元素但可以放在集合中
- 如何解决EnterLib异常处理框架最大的局限——基于异常"类型"的异常处理策略
- [WCF权限控制]从两个重要的概念谈起:Identity与Principal[下篇]
- 收藏!6道常见hadoop面试题及答案解析
- 这是EnterLib PIAB的BUG吗?
- [WCF权限控制]基于Windows用户组的授权方式[上篇]
- EnterLib PIAB又一个BUG?
- 关于WCF的一个非常“无语”的BUG!
- 谈谈分布式事务之一:SOA需要怎样的事务控制方式
- [WCF权限控制]WCF的三种授权模式
- [WCF安全系列]消息的保护等级[下篇]
- [WCF安全系列]通过绑定元素看各种绑定对消息保护的实现
- 通过添加HTTP Header实现上下文数据在WCF的自动传递
- 模拟在WCF中的应用
- [WCF权限控制]通过扩展自行实现服务授权[提供源码下载]
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释