- public void collectionTest() {
- // ArrayList是一个有顺序的集合,相当于一个数组,里面有重复的对象,存放的是对象的引用
- // Collection colls = new ArrayList();
-
- // HashSet放入一个对象时与原来所有的对象进行比较,
- // 如果一样就不放入集合,例如前面有十个都要进行比较
- Collection colls = new HashSet();
- // HashCode值是内存地址进行换算出来的一个值,
- // 首先判断要放入对象的hashcode值与集合中的任意一个元素的hashcode值是否相等,
- // 如果不相等直接将该对象放入集合中。
- // 如果hashcode值相等,然后再通过equals方法判断要放入对象与集合中的任意一个对象是否相等,
- // 如果equals判断不相等,直接将该元素放入到集合中,否则不放入。
- demo3 d4 = new demo3(5, 5);
- demo3 d5 = new demo3(4, 4);
- demo3 d6 = new demo3(3, 3);
- demo3 d7 = new demo3(3, 3);
- // 判断d7 是否与 d6为相同对象时需要HashCode和equals都返回为true时才能确定
-
- // equals方法主要用于判断对象的内存地址引用是不是同一个地址(是不是相同值的对象)
- // 如colls.add(d6)添加两次,第二次是添加不进去的
- colls.add(d6);
- colls.add(d5);
- colls.add(d4);
- colls.add(d7);
- colls.add(d6);
- // d4值的发生改变后,是不能被remove掉的,这样会发生泄漏的,
- // 系统在长时间运行后,会内存耗尽最后崩溃。
- d4.y = 6;
- colls.remove(d4);
- System.out.println(colls.size());
- }
- class demo3{
- private int x ;
- private int y;
-
- public demo3(int x, int y) {
- super();
- this.x = x;
- this.y = y;
- }
- public int getX() {
- return x;
- }
- public void setX(int x) {
- this.x = x;
- }
- public int getY() {
- return y;
- }
- public void setY(int y) {
- this.y = y;
- }
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + getOuterType().hashCode();
- 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;
- demo3 other = (demo3) obj;
- if (!getOuterType().equals(other.getOuterType()))
- return false;
- if (x != other.x)
- return false;
- if (y != other.y)
- return false;
- return true;
- }
- private ReflectTest getOuterType() {
- return ReflectTest.this;
- }
-
- }
复制代码
|
|