- 浏览: 96309 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
jameswolf:
补肾啊!冬天多喝,但是补只是后招,别漏才是真理,呵呵
朋友告诉我的神粥秘方 -
wa327114652:
很想学习,但能再详细点吗?
for java beginner 5-2 - 自己实现枚举-下 -
superlittlefish:
不错,简单易懂.一直在看你的blog,感觉反射写的挺好的.让我 ...
for java beginner 15 下java反射在框架里的应用 读取properties文件
java 反射 数组的反射(上)其实是讲ArrayList HashSet HashCode
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方法都检索不到了,到时候内存益出了.. } }
-------------------------关于测试,下一篇再说一下吧
发表评论
-
pull解析器通用解析XML与生成XML
2013-02-23 14:52 0pull解析器,简单易用,android都在用,肯定有他的优 ... -
java decompiler - a tool to view jar file
2012-02-15 22:26 1016有时候还是很需要看看人家JAR包里写的什么乱七八糟的东西,这东 ... -
JAVA工作
2011-07-20 21:11 726################## Applet ... -
helios-use-subversion-behind-proxy
2011-04-04 16:30 764download the eclipse helios in ... -
IBM发布时间不足解决方法
2011-02-17 19:16 760D:\IBM\SDP\runtimes\base_v61\p ... -
log4j简单例子
2010-10-03 18:27 860简单点说, 写程序时,有时懒得debug,就直接Sy ... -
java 泛型-1-使用而已
2009-12-01 23:39 1108023-java1.5泛型-1 懒人想的 把检查代码的工作交 ... -
java 1.5 annotation-3 设值让反射拿
2009-12-01 20:39 1576java 1.5 annotation 的use 前面的什么 ... -
java 1.5 annotation-2
2009-11-30 23:28 1183java 1.5 注解-2[非常重要 比每举重要] 刚刚只是 ... -
java 1.5 annotation-1
2009-11-30 21:07 1302java 1.5 注解[非常重要 比每举重要] 1.5后的新 ... -
for java beginner-19 beanutils包
2009-11-29 22:20 748019-使用BeanUtils工具包操 ... -
for java beginner-18 JAVABEAN规范-1
2009-11-29 21:12 1026018-JAVABEAN规范-1 IntroSpec ... -
for java beginner 17 配置文件的知识
2009-11-29 19:29 779017 配置文件的知识 刚刚已经说到 配置文件,我说放 工程 ... -
for java beginner 15 下java反射在框架里的应用 读取properties文件
2009-11-29 17:44 1381java 框架基础 ------------------- ... -
for java beginner 14 ArrayList HashSet HashCode(中)
2009-11-29 13:24 1122java 反射 数组的反射 ArrayList HashSe ... -
for java beginner12数组的反射的应用
2009-11-29 10:04 1018java 反射 数组的反射 数组也是一种类型,当然可以反射 ... -
for java beginner11 java 反射 Method类
2009-11-29 08:30 1277java 反射 Method类 str1.charAt() ... -
for java beginner10 java 反射 Field类
2009-11-29 07:17 3538java 反射 Field类 -------用到一个bea ... -
for java beginner 9 java反射的概念和Constructor 类
2009-11-29 07:13 1389java 反射 的概念 和 Constructor 类 反 ... -
for java beginner 8 java 反射的基础基础Class的理解
2009-11-29 07:09 1021java 反射 的基础基础 Class的理解 反射 在 1 ...
相关推荐
8. **数组与集合框架**:数组用于存储同类型的多个数据,而集合框架(如ArrayList, LinkedList, HashSet等)提供了更灵活的数据结构。理解它们的使用场景和操作方法能提升代码的效率。 9. **异常处理**:Java通过...
Java编程入门是初学者踏入Java世界的一把钥匙,由知名编程大师Herbert Schildt编写的第二版《Java Beginner's Guide》提供了全面且易懂的教程。这本书旨在帮助读者掌握Java编程的基础,为后续深入学习打下坚实基础。...
而集合框架是一组接口和类,提供了存储和操作对象数组的功能,如ArrayList、LinkedList、HashSet和HashMap等。 Module7(lst)可能涉及的是输入/输出(I/O)和文件操作。Java提供了丰富的I/O类库,用于读写文件、网络...
2. **Java 程序结构与语法**:这部分内容涵盖了 Java 的基本语法结构,包括变量、数据类型、控制结构(条件语句和循环)、函数、数组等。这些基础知识对于编写任何 Java 应用程序都是必不可少的。 3. **面向对象...
Java语言是目前世界上最流行的编程语言之一,尤其在企业级应用开发中占据主导地位。对于初学者来说,掌握Java的基础知识并能通过编程练习题来巩固理解是非常重要的。《Java语言程序设计(基础篇)》是一本针对初学者...
7. **集合框架**:Java集合框架提供了多种数据结构,如ArrayList、LinkedList、HashSet、HashMap等,它们允许存储和操作一组对象。例如,创建一个ArrayList并添加元素: ```java List<String> names = new ...
beginner:ПреисполняюсьпознаниямисШилдтомJavaRushКурсомотmail.ruнаютубе" 提示我们这是一个针对初学者的Java学习资源,可能来自于网络课程,比如JavaRush或者在...