`
hubin4
  • 浏览: 96629 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

for java beginner13java 反射 数组的反射(上)其实是讲ArrayList HashSet HashCode

    博客分类:
  • JAVA
阅读更多
java 反射 数组的反射(上)其实是讲ArrayList HashSet HashCode

ArrayList HashSet HashCode
--------------------
package com.ncs;

public class Point {

	

	private int x;
	public int y;
	
	public  String s1 ="ball";
	public String s2="hubin";
	public String s3="zhangxiaoxiang";
	//做实验而已,字段不可能是 public 的
	
	public Point(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}

//	@Override
//	public int hashCode() {
//		final int prime = 31;
//		int result = 1;
//		result = prime * result + x;
//		result = prime * result + y;
//		return result;
//	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final Point other = (Point) obj;
		if (x != other.x)
			return false;
		if (y != other.y)
			return false;
		return true;
	}
	
}

--------------------------------
package com.ncs;

import java.util.Collection;
import java.util.HashSet;

public class ReflectInCollection {

	public static void main(String[] args) {
		//Collection collection = new ArrayList();
		Collection collection = new HashSet();
		Point p1 = new Point(3,3);
		Point p2 = new Point(5,5);
		Point p3 = new Point(3,3); //看看和 p1有什么不一样
		collection.add(p1);
		collection.add(p2);
		collection.add(p3);
		collection.add(p1);
		
		System.out.println(collection.size()); //4
		
		//如果 ArrayList() 换成  HashSet() //3
		
		//ArrayList类似数组,有顺序 你放进去 哪怕是同一个对象,放十次
		//★就有十个格子新出来,只不过那十个格子存放的地址都一样,[因为刚刚说的是同一个对象嘛]
		//所以ArrayList还可以插队,你插哪里你定好了
		
		//HashSet()放东西前要 判断 里面是不是已经有了,有了不放, 不是覆盖★
		
		//刚刚测试说明了 ,p1 和 p3 不是一个,如果你希望相同,就要自己写 eques方法
		//★默认的eques方法通常是比较 hashcode ,hashcode是根据内存值算出来的
		
		//现在回去修改 Point 类的两个方法 equals  hashcode
		//IDE有专门的 菜单的,看看好了
		//自动生成 ,非常不错 
		//现在 HashSet() 变2了 认为 p1 == p3 
		
		//如果把public int hashCode() 去了,又变3了
		//就是说 HashSet() 根据 hashCode() 方法判断两个对象是不是一样的
		
		//hash这东西,有点难度的
		//就比如说你不想存一样的东西到集合里吧,
		//这个集合你怎么实现???一个一个判断????假如这个集合有上千亿条记录呢??
		//假如你想放进去的记录是条新的,那是不是说你要比较千亿次后才可以放进去呢??
		//有高手发明 一种哈稀 算法,把集合分若干 存储 区域 ,每个区域 存放 的对象匹配那个
		//对象算出的Hash值,
		//说白了就是你这个对象 算出来的 那个HASH码 只可以存到 特定的某段 区域里
		//我找的时候也好找了
		
		//再说白一点,每个object都可以算出 哈稀 值 ,
		//当把这个对象 存到 具有HASH功能的集合的时候,★[存ArrayList之类的不管了]
		//不是随便就可以存的,规定你只可以存特定某段内存
		//要比较是不是一样,先到那一段内存 ,然后一个一个判断equals,
		//有趣的是,我这段 没有 equals,其他段有的,JVM还是认为你没有,它只认那一段
		
		//可见 hashset集合有很好的对象 检索功能,但是存储对象的效率会低一些,
		//因为先要算你这个对象改放 哪段 内存呢!
		
		//同一个对象在程序运行期间任何时候返回的 哈稀值 是始终不变的
		//所以 即使两个对象的equals方法比较结果一样,他们默认的
		//hashcode方法返回的值也是不一样的
		
		//所以有一说法,你让两个对象的equals一样了,就也把 hashcode弄一样吧
		//其实,如果你确定不会把对象放 hash功能的集合里,大可不管 hashcode
		//一般来说
		//只有类的实例对象要被采用哈稀算法进行存储和检索时,这个类才需要按照
		//要求覆盖hashCode()方法,即使程序可能暂时不会用到当前类的
		//hashCode()方法,但是为它提供一个hashcode()方法也没有什么不好
		//所以通常这两个方法会同时覆盖,IDE也设计了这样的菜单
		
		//通常,一个类的两个实例用equals比较一样时,他们的hashcode也必须一样
		//但是反之就不一定了,"BB" "Aa"的equals肯定不一样,但是
		//hashcode()返回的就是一样的
		
		//★★最后,当一个对象存储进hash集合后,不要去修改这个对象里参与计算
		//哈稀值的字段,要不然contains方法都检索不到了,到时候内存益出了..
	}

}

-------------------------关于测试,下一篇再说一下吧
分享到:
评论

相关推荐

    java for the beginner

    introduce in english

    JAVA A beginner's guide sixth edition

    2. Java初学者指南:《JAVA A beginner's guide sixth edition》是一本专门为Java初学者编写的入门教材。该书全面介绍了Java的基础知识,适合那些没有编程经验的读者。 3. 作者Herbert Schildt:Herbert Schildt是...

    Java: A Beginner's Guide 5th Edition

    Fully updated to cover Java Platform, Standard Edition 7 (Java SE 7), Java: A Beginner's Guide, Fifth Edition starts with the basics, such as how to compile and run a Java program, and then discusses...

    Java and Algorithmic Thinking for the Complete Beginner – Compact Edition

    This book is for anyone who wants to learn computer programming and knows absolutely nothing about it. If you are wondering whether this book is going to teach you how to create amazing applets or ...

    Java A Beginner's guide

    综上所述,《Java A Beginner’s Guide》第六版是一本针对初学者的全面且权威的Java编程指南,作者赫伯特·席尔德特结合自己在编程语言领域的深厚知识和广泛经验,为读者提供了一个理解Java语言的框架,同时由Java...

    Java A Beginner's Guide(6th) 无水印pdf

    Java A Beginner's Guide(6th) 英文无水印pdf 第6版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系...

    Java Programming for the Absolute Beginner

    6. **集合框架**:学习ArrayList、LinkedList、HashSet、HashMap等集合类的使用,以及泛型的概念。 7. **多线程**:理解并发编程的基本原理,创建和管理线程,同步机制如synchronized关键字和wait()、notify()方法...

    Pentaho 8 Reporting for Java Developers azw3

    Pentaho 8 Reporting for Java Developers 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Java-Programming-for-Beginner:书

    8. **数组与集合框架**:数组用于存储同类型的多个数据,而集合框架(如ArrayList, LinkedList, HashSet等)提供了更灵活的数据结构。理解它们的使用场景和操作方法能提升代码的效率。 9. **异常处理**:Java通过...

    Java 7 A Beginner’s Tutorial, 3rd Edition.pdf

    ### Java 7 初学者教程知识点总结 #### 一、简介 - **书籍基本信息:** - **书名**:《Java 7 初学者教程》第三版 - **作者**:Budi Kurniawan - **出版年份**:2011 年 10 月 - **ISBN**:978-0-9808396-1-6 ...

    Java2:A Beginner's Guide Second Edition 原版 pdf

    容器和集合框架是Java的重要组成部分,读者将学习ArrayList、LinkedList、HashSet、HashMap等常用集合类的使用。同时,书中还会涉及多线程编程,如何创建和管理线程,以及同步机制,如synchronized关键字和wait()、...

    Java_Programming_for_the_Absolute_Beginner.rar_absolute java_jav

    5. **集合框架**:Java集合框架包括ArrayList、LinkedList、HashSet、HashMap等,它们为存储和操作对象提供了便利的数据结构。了解这些类的特性和使用方法是进阶Java编程的关键。 6. **IO流**:Java的输入/输出(IO...

    Java Game Development with LibGDX: From Beginner to Professional.pdf

    Learn to design and create video games using the Java programming language and the LibGDX software library. Working through the examples in this book, you will create 12 game prototypes in a variety ...

    Java - Java A Beginner's Guide 9th edition

    ### Java - Java A Beginner's Guide 9th edition #### Java基础知识概述 本书旨在为初学者提供全面、深入的Java编程入门指导。Java是一种广泛使用的面向对象编程语言,它以其跨平台性、安全性以及丰富的类库支持...

    Java A Beginner’s Guide(7th) epub

    Java A Beginner’s Guide(7th) 英文epub 第7版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Java A Beginner's Guide(6th) epub

    Java A Beginner's Guide(6th) 英文epub 第6版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Java A Beginner’s Guide(7th) azw3

    Java A Beginner’s Guide(7th) 英文azw3 第7版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Java A Beginner's Guide(6th) mobi

    Java A Beginner's Guide(6th) 英文mobi 第6版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

Global site tag (gtag.js) - Google Analytics