1.List接口下都有哪些集合,他们各自有什么特点?
(1)list接口常见实现类有ArrayList、LinkedList、Vector;
(2)各自的特点
1)ArrayList:底层采用数组结构,查询快,增删慢
2)Linked:底层采用链表结构,查询慢,增删快,对内存的空间利用率高
3)Vector:和Arraylist类似,区别在于它是线程安全型的,所以效率较低,栈内存设计使用到Vector,其它地方
很少使用
2.Set接口下的集合是如何保证无序不可重复的
(1)以TreeSet和HashSet为例
1)TreeSet的元素需要内部实现比较器或则创建TreeSet对象的时候传入比较器,通过比较器来判断两个元素的
大小,如果要存入的元素和原集合中的某个元素相同就不进行存储,从而保证唯一性
2)HashSet集合在存储元素时,会先调用元素的hashCode()方法,判断当前要存储的元素hash值是否已经
在集合中存在,如果已经存在(可能是不同元素但是发生hash冲突),就调用equal方法,如果euqal判断
也是相等,则不进行存储
3.我们为什么要重写HashCode( )和equals()方法?
(1)要存入HashSet集合的元素,必须重写这两个方法,因为HashSet会根据这两个方法判断要存入元素是否已经
在集合中存在,从而保证存储的唯一性,如果不重写,默认对地址比较,不对内容比较,这样地址不一样,但内
容一样的元素也会存储进来
4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
(1)先判断HashCode(),因为hashCode通过算法获取和内容相关的hash值,速度较快,equals判断速度较慢
而且hashCode不同肯定是不同的元素,相同可能是相同的元素,也可能是不同元素但是发生hash冲突,这个
时候再调用equals判断
5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
(1)Comparator使用比较多,因为Comparator是外部比较器,在使用比较方法的时候当成参数传进去接口,比较
灵活,修改也比较方便,Comparable是内部比较器,在被比较的元素类定义时实现该接口,修改不方便。 |
|