`
msn877763580
  • 浏览: 83513 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java 集合学习一 HashSet

阅读更多
寒假在家,看书解闷。以下代码来自于疯狂Java讲义
[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]

[size=x-large][color=green]下面的程序从方面进行了验证
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的结果
	}
}
分享到:
评论

相关推荐

    Java 集合类(HashSet、ArrayList、LinkedList、HashMap).pptx

    掌握List集合、Set集合、Map集合的使用以及Iterator迭代器和foreach循环的使用 了解常用的集合类 熟悉泛型的使用

    通过实例学习Java集合框架HashSet

    通过实例学习Java集合框架HashSet HashSet是Java集合框架中的一种重要数据结构,用于存储不重复的元素。通过实例学习Java集合框架HashSet,可以帮助开发者更好地理解和使用HashSet,提高编程效率和代码质量。本文将...

    深入Java集合学习系列

    "深入Java集合学习系列:HashSet的实现原理 - 莫等闲 - ITeye技术网站.mht"会讲解HashSet如何避免元素重复以及它的性能特点。 最后,LinkedHashSet结合了HashSet的特性与LinkedHashMap的顺序特性,它维护了元素的...

    java HashSet 集合排序

    java HashSet 集合排序,需要通过利用TreeSet集合排序。2013-10-30。

    java集合-HashSet的使用

    HashSet 是 Java 中的一个集合类,它实现了 Set 接口并提供了基于哈希表的无序、不重复元素的集合。具体来说,它是通过哈希表(实际上是一个 HashMap 实例)来存储元素的。 以下是 HashSet 的一些主要特点: 无序...

    java集合思维导图

    Java集合框架是Java编程语言中的一个核心部分,它为数据存储和管理提供了高效且灵活的解决方案。本思维导图及总结旨在深入理解并掌握Java集合的相关概念和使用方法。 首先,我们来了解一下Java集合框架的基本构成。...

    一个讲解很清晰的Java集合框架PPT

    这个“一个讲解很清晰的Java集合框架PPT”显然是一个对外公开的教育资源,旨在帮助学习者深入理解Java集合的概念、结构以及实际应用。 在Java中,集合框架主要包括四大接口:List、Set、Queue和Map。每个接口都有...

    java 集合

    首先,Java集合框架由一系列接口和实现这些接口的类组成。主要的接口有`List`、`Set`和`Queue`,它们各自代表了不同特性的数据结构。`List`接口定义了一个有序的、允许重复元素的集合,如`ArrayList`和`LinkedList`...

    Java集合框架学习笔记

    Java集合框架是Java编程语言中一个至关重要的组成部分,它提供了数据结构和算法的抽象,使得开发者可以方便地存储和管理各种类型的数据。本篇将详细探讨Java集合框架的基础知识,包括核心接口、类的层级结构以及Java...

    java集合框架的使用。集合的运算

    通过学习和实践这些代码,新手可以更好地理解和掌握Java集合框架的用法,并将其应用于实际的项目开发中。同时,这也适合作为数据结构课程设计的基础,因为集合运算正是数据结构中的基本操作。对于想要深入研究Java...

    java基础练习题 (目前到集合内含三个小综合案例)

    Java集合框架包括接口(如List、Set、Queue)和实现类(如ArrayList、LinkedList、HashSet、HashMap等)。理解各种集合的区别,以及它们的实现方式和应用场景,是提升编程效率的关键。例如,List接口中的ArrayList和...

    java泛型集合 java集合 集合 java Collection

    Java集合框架是一个包含多种数据结构(如列表、集、队列等)的API,这些数据结构由接口(如`Collection`、`List`、`Set`和`Queue`)和实现这些接口的类(如`ArrayList`、`HashSet`和`LinkedList`)组成。`Collection...

    java集合学习代码

    在这个“java集合学习代码”中,我们可能涵盖了一系列关于Java集合框架的核心概念和实践应用。 首先,Java集合框架包括接口和实现类。主要的接口有List、Set和Queue,它们都继承自Collection接口。List接口代表有序...

    Java集合排序及java集合类详解.pdf

    Collection是Java集合框架中最重要的接口之一,它是所有单列集合的根接口。 ##### 1.2 Collection - **常用方法**: - `add(E e)`:向集合添加一个元素。 - `remove(Object o)`:从集合中移除指定元素。 - `...

    Java集合排序及java集合类详解

    Java集合框架是Java编程语言中的一个核心组成部分,它为数据存储和操作提供了丰富的接口和类。在本篇中,我们将深入探讨Java集合的排序机制以及集合类的详细使用。 首先,我们来了解一下Java集合的基本分类。Java...

    java集合类详解(set list ArrayList等java集合类详述)

    Java 集合类是 Java 语言中的一种基本数据结构,用于存储和操作大量数据。集合类可以分为三大类:Collection、List 和 Set。 Collection 是集合框架中的根接口,提供了基本的集合操作,如 add、remove、contains 等...

    【死磕Java集合】-集合源码分析.pdf

    Java集合框架是Java语言中一个非常重要的组件,提供了多种数据结构和算法来存储和操作数据。在Java集合框架中,LinkedList、ArrayList、HashMap、TreeMap等都是非常常用的数据结构。本文将对Java集合框架的源码进行...

    Java集合 练习代码

    在学习和实践这些Java集合练习代码时,你不仅会掌握基本的集合操作,还会了解不同集合类型的选择依据,以及在实际场景中如何根据需求选择合适的集合。通过不断实践,你将能够熟练地运用Java集合框架解决各种数据处理...

    java集合使用实例

    Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了数据结构和算法的实现,使得在处理各种数据存储和操作时更加高效。本资源聚焦于Java集合中的四个关键类:HashSet、TreeSet、HashMap和TreeMap,它们...

    实验05 Java集合.doc

    Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了一组高级的数据结构,使得开发者能够更方便地管理和操作对象。在本次实验中,我们主要关注了三个主要的集合接口:Set、List和Map,以及它们的一些常见...

Global site tag (gtag.js) - Google Analytics