A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 厦门校区   /  2018-12-22 18:45  /  3100 人查看  /  36 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.List接口下都有哪些集合,他们各自有什么特点
ArrayList: 底层是数组,查询快,增删慢
LinkedList:底层是链表,查询慢,增删快;首尾查询快,有许多与首尾相关的方法
Vector: 安全性高;时间比较久,逐渐被ArrayList取代

2.Set接口下的集合是如何保证无序不可重复的
无序:存储时通过不同的哈希值进行对应的保存,在取出时是按照特定的规则取出
不重复:
(1)首先,equals()方法可以对对象内容进行比较,但是效率低下;
(2)可以通过HashCode方法和哈希值对equals()方法进行优化;
(3)在调用equals()方法前,先判断哈希值,通过重写HashCode方法获得根据对象内容生成的一串哈希值;
(4)如果哈希值不相等,那么这两个对象的内容肯定不同,直接添加到集合中;
        如果哈希值相等,那么这两个对象的内容有可能不同,调用equals()方法对这两个对象的内容进行比较,如比较结果不同,将此内容添加到同一个哈希值下的槽中

3.我们为什么要重写HashCode( )和equals()方法?
因为要确保set集合存储不重复的元素的前提,就是要重写HashCode( )和equals()方法,Object中的HashCode( )方法默认获取的是模拟的地址值,我们需要重写HashCode( )方法,让其根据对象的内容生产一串哈希值,再比较哈希值,快速判断两个对象的内容是否相同,如哈希值相同,就需要调用equals()方法,而equals()方法默认比较的是地址值,需要重写才能让其比较属性内容,最终达到存储元素不重复的效果。

4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
先判断HashCode( ),因为如果使用equals()方法,效率低下,对此引入了HashCode( )、哈希值进行优化,通过先判断两个元素的哈希值可以提高运行效率

5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
Comparable:排序的规则在类中已经规定完成,不能及时根据自身需求更改排序规则;调用是比较简单,可以通过Collections.sort进行排序
Comparator:可以在调用时根据自身需求更改排序规则;调用时格式相对复杂,需要指定比较器
Comparator接口用得多,因为Comparato在排序顺序上实现精确控制,还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马