Java集合概念

1Collection Collections的区别

  Collection是集合类的上级接口,继承与他的接口主要有Set 和List.       
  Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、 排序、线程安全化等操作。  

  Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

2Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别

用equals()来区分, 

==是用来判断两者是否是同一对象(同一事物),而equals是用来判断是否引用同一个对象。再看一下Set里面存的是

对象,还是对象的引用。根据Java的存储机制可知,set里面存放的是对象的引用,所以当两个元素只要满足了equals()时就已经指向同一个对象,

也就出现了重复元素。所以应该用equals()来判断。


3List, Set, Map是否继承自Collection接口

List,Set是,Map不是。

Map是键值对映射容器,是双列集合。与List和Set有明显的区别,他们都是单列集合,而Set存储的零散的元素不允许有重复的元素,List是线性结构的容器,适用于按数值索引访问元素的情形。

4、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对

(1) equals() 和 hashCode() 是2个不同的方法,要实现 "(x.equals(y) == true),但却可有不同的hash code" 是能做到的。

(2) 但这样做非常不好。在 Hashtable 中是这样使用 equals() 和 hashCode() 的:get 和 put 时,首先使用 hashCode() 进行在 keys 中定位和查找,这样会提高查找效率。如果现有多个 key 的 hashCode 相同,再用 equals 在具有相同 hashCode 的这几个 key 中进行依次查找。

也就是说,java 中的设计思想是:允许不同对象有相同的 hashCode(),但是 equal 的对象的 hashCode 肯定是相同的。equals() 在 java 中被认为:对象之间 "一模一样"。

 

5、说出ArrayList,Vector, LinkedList的存储性能和特性

ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

 

6HashMapHashtable的区别

HashMap是Hashtable他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率要高于Hashtable。

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

 

7ArrayListVector的区别,HashMapHashtable的区别

(1)Vector是多线程安全的,而ArrayList不是,这个可以从源码中看出,Vector类中的方法很多有synchronized进行修饰,这样就导致了Vector在效率上无法与ArrayList相比;

(2)两个都是采用的线性连续空间存储元素,但是当空间不足的时候,两个类的增加方式是不同的,很多网友说Vector增加原来空间的一倍,ArrayList增加原来空间的50%,其实也差不多是这个意思,不过还有一点点问题可以从源码中看出,一会儿从源码中分析。

(3)Vector可以设置增长因子,而ArrayList不可以,最开始看这个的时候,我没理解什么是增量因子,不过通过对比一下两个源码理解了这个,先看看两个类的构造方法:

HashMap是Hashtable他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率要高于Hashtable。

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值