黑马程序员技术交流社区
标题: 【哈尔滨校区】【keven整理】Java反射详解【第五弹】 [打印本页]
作者: devilkeven 时间: 2015-12-11 22:43
标题: 【哈尔滨校区】【keven整理】Java反射详解【第五弹】
4、当一个对象存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段了,否则对象修改后的哈希值与最初存储进HashSet集合中的哈希值就不同了。在这种情况下,调用contains方法或者remove方法来寻找或者删除这个对象的引用,就会找不到这个对象。从而导致无法从HashSet集合中单独删除当前对象,从而造成内存泄露。(程序中某一些对象不再被使用,以为被删掉了,但是没有,还一直在占用内存中,当这样的对象慢慢增加时,就会造成内存泄露。)
补充:
内存泄露:某些对象不再使用了,占用着内存空间,并未被释放,就会导致内存泄露;也就是说当程序不断增加对象,修改对象,删除对象,日积月累,内存就会用光了,就导致内存溢出。
示例:
[java] view plaincopy
1. package cn.itheima.Demo;
2.
3. import java.util.ArrayList;
4. import java.util.Collection;
5. import java.util.HashSet;
6.
7. public class HashCodeDemo {
8.
9. public static void main(String[] args) {
10. //Collection collection =new ArrayList();
11. Collection collection =new HashSet();
12. HashCodeTest hct1=new HashCodeTest(1,2);
13. HashCodeTest hct2=new HashCodeTest(3,4);
14. HashCodeTest hct3=new HashCodeTest(1,2);
15.
16. collection.add(hct1);
17. collection.add(hct2);
18. collection.add(hct3);
19. collection.add(hct1);
20.
21. //hct1.setX(5);
22. //collection.remove(hct1);
23. System.out.println(collection.size());
24. }
25.
26. }
27.
28. //测试类
29. class HashCodeTest{
30. private int x;
31. public int y;
32.
33. public HashCodeTest(int x,int y){
34. this.x=x;
35. this.y=y;
36. }
37.
38. public int getX() {
39. return x;
40. }
41.
42. public void setX(int x) {
43. this.x = x;
44. }
45.
46. public int getY() {
47. return y;
48. }
49.
50. public int hashCode() {
51. final int prime = 31;
52. int result = 1;
53. result = prime * result + x;
54. result = prime * result + y;
55. return result;
56. }
57.
58. public boolean equals(Object obj) {
59. if (this == obj)
60. return true;
61. if (obj == null)
62. return false;
63. if (getClass() != obj.getClass())
64. return false;
65. HashCodeTest other = (HashCodeTest) obj;
66. if (x != other.x)
67. return false;
68. if (y != other.y)
69. return false;
70. return true;
71. }
72.
73. public void setY(int y) {
74. this.y = y;
75. }
76.
77. public String toString() {
78. return "HashCodeTest [x=" + x + ", y=" + y + "]";
79. }
80. }
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |