博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 集合学习一 HashSet
阅读量:4101 次
发布时间:2019-05-25

本文共 2294 字,大约阅读时间需要 7 分钟。

[size=x-large][color=green][b]寒假在家,看书解闷。以下代码来自于疯狂Java讲义[/b][/color][/size]
[size=large][color=green]import java.util.*; //类A的equals方法总是返回true,但没有重写其hashCode()方法 class A {
public boolean equals(Object obj) {
return true; } } //类B的hashCode()方法总是返回1,但没有重写其equals()方法 class B {
public int hashCode() {
return 1; } } //类C的hashCode()方法总是返回2,但没有重写其equals()方法 class C {
public int hashCode() {
return 2; } public boolean equals(Object obj) {
return true; } } public class TestHashSet {
public static void main(String[] args) {
HashSet books = new HashSet(); //分别向books集合中添加2个A对象,2个B对象,2个C对象 books.add(new A()); books.add(new A()); books.add(new B()); books.add(new B()); books.add(new C()); books.add(new C()); System.out.println(books); } } //输出结果:[lee.B@1, lee.B@1, lee.C@2, lee.A@1fb8ee3, lee.A@c17164] // PS :程序说明了两个HashSet集合判断元素相等的标准是hashcode和equals方法缺一不可[/color][/size]
[b][size=x-large][color=green]下面的程序从方面进行了验证[/b]
import java.util.*; class R{
int count; public R(int count){
this.count = count; } public String toString(){
return "R(count属性:" + count + ")"; } public boolean equals(Object obj){
if (obj instanceof R){
R r = (R)obj; if (r.count == this.count){
return true; } } return false; } public int hashCode(){
return this.count; } } public class TestHashSet2{
public static void main(String[] args) {
HashSet hs = new HashSet(); hs.add(new R(5)); hs.add(new R(-3)); hs.add(new R(9)); hs.add(new R(-2)); System.out.println(hs); //打印集合 //输出结果:[R(count属性:5), R(count属性:9), R(count属性:-3), R(count属性:-2)] Iterator it = hs.iterator(); //获取集合的迭代器 R first = (R)it.next(); //取出第一个元素 first.count = -3; //为第一个元素的count属性赋值 //PS :注意这里仅仅是修改了count的属性值,并没有改了原有R对象的hascode System.out.println(hs);//打印结合 //输出结果:[R(count属性:-3), R(count属性:9), R(count属性:-3), R(count属性:-2)] hs.remove(new R(-3));//删除count为-3的R对象 System.out.println(hs);//打印结果 //输出结果:[R(count属性:-3), R(count属性:9), R(count属性:-2)] System.out.println("hs是否包含count为-3的R对象?" + hs.contains(new R(-3))); //输出false //PS :因为此时的count=-3对应R对象的hascode是原来count=5的R对象对应的 System.out.println("hs是否包含count为5的R对象?" + hs.contains(new R(5))); //输出false //PS: 比较时不仅要比较hascode的值还要比较equals的结果 } }

转载地址:http://inbsi.baihongyu.com/

你可能感兴趣的文章
php实现socket(转)
查看>>
PHP底层的运行机制与原理
查看>>
深入了解php底层机制
查看>>
PHP中的stdClass 【转】
查看>>
XHProf-php轻量级的性能分析工具
查看>>
PHP7新特性 What will be in PHP 7/PHPNG
查看>>
比较strtr, str_replace和preg_replace三个函数的效率
查看>>
ubuntu 下编译PHP5.5.7问题:configure: error: freetype.h not found.
查看>>
PHP编译configure时常见错误 debian centos
查看>>
configure: error: Please reinstall the BZip2 distribution
查看>>
OpenCV gpu模块样例注释:video_reader.cpp
查看>>
【增强学习在无人驾驶中的应用】
查看>>
OpenCV meanshift目标跟踪总结
查看>>
人工神经网络——神经元模型介绍
查看>>
Windows 窗口底层原理
查看>>
一种函数指针的运用
查看>>
今天,Python信息量很大!
查看>>
Flash 已死,Deno 当立?
查看>>
编程差的程序员,90%都是吃了数学的亏!骨灰级开发:方法不对,努力也白费...
查看>>
都无代码了,还要程序员吗?
查看>>