你眼中的HashSet和ArrayList

这是我的源文件目录:

在这次实验中我们只讨论HashSet和ArrayList的区别,类加载器管理资源和配置文件如有兴趣可以到我的文章中查看。

1:我们在HashSetArrayList中创建一个ArrayList集合对象collections.

2.我们在ReflectPoint中定义两个变量x,y,并构造他们的构造方法和toString()方法。(这个过程我们可以不用自己做,按住alt+shift+s,直接点击里面的Generate Constructor 和toString()方法,系统便可以帮我们自动构造)

3.在HashSetArrayList的主方法中新建三个"点",pt1,pt2,pt3,分别设置他们的参数,然后将她们加到collections中。

4.打印collections的长度:

HashSetArrayList:

package cn.nuist.pers.April.CSDN;

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

public class HashSetArrayList {

	public static void main(String[] args) {
		//Collection collections = new ArrayList();
		Collection collections = new HashSet();
		ReflectPoint pt1 = new ReflectPoint(3,3);
		ReflectPoint pt2 = new ReflectPoint(5,5);
		ReflectPoint pt3 = new ReflectPoint(3,3);
		
		collections.add(pt1);
		collections.add(pt2);
		collections.add(pt3);
		collections.add(pt1);
		
		System.out.println(collections.size());
	}
}


ReflectPoint:


package cn.nuist.pers.April.CSDN;

public class ReflectPoint {

	private int x;
	private int y;
	
	public ReflectPoint(int x, int y) {
		// TODO Auto-generated constructor stub
	}

	@Override
	public String toString() {
		return "ReflectPoint [x=" + x + ", y=" + y + "]";
	}
	
	
}

此时大家猜测结果是多少?

emm,结果为4。

5.我们将ArrayList换作HashSet,即将其中代码改动如下:

Collection collections = new HashSet();这个

此时的结果呢?

答案是3。

原因如下:ArrayList是一组有序的集合,当对象被添加到ArrayList时,对象会先找到第一个空缺的地方,记住,放进去的是对象的引用,不是对象本身,接下来,第二个对象依次在第二个位置增加,如果发现有相同的对象,也是按照顺序放进去,也就是说,在这个有序集合里,每有一个对象就会放入一个引用,可能出现多个引用指向同一个对象的情况,但没有关系.

HashSet当放入对象时,首先查看里面是否有这样一个对象,如果有,则不放,如果没有才会放入,如果真的很想放进去这个对象,除非将已经存在的对象删除。

所以在使用ArrayList的时候,她不管你放入的是什么东西,只要你敢放,她就敢接受,所以我们一共放了pt1,pt2,pt3,pt1,四个东西进去,她也照单全收了,所以size()为4;而在使用HashSet的时候,当你放入pt1,嗯,能放进去,因为没有pt1这个东西在里面,同样的pt2,pt3,但是当你再放pt1的时候,这时候她不干了,因为已经有了pt1了,所以size()为3.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值