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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.List接口下都有哪些集合,他们各自有什么特点list接口下有ArrayList、LinkedList、Vector。ArrayList的底层数据结构是数组,它具有的特点是增删难,查询快;LinkedList的底层数据结构是链表,它具有的特点是:增删快,查询慢。vector具有线程安全、效率低的特点。他们的共同特点是有序;可重复,有索引值

2.Set接口下的集合是如何保证无序不可重复的
通过重写hashCode方法得到对象内容的哈希值,判断元素的哈希值是否相同,如果不同,直接存入;如果相同,需要进一步通过重写的equals方法来进行判断,(因为存在哈希值的算法里可能存在哈希值相同,内容不同的情况)。如果equals判断结果为真,说明内容相同,就是重复元素,不储存;如果为假,则链接在原来元素后面。

3.我们为什么要重写HashCode( )和equals()方法?
不重写时,默认得到的是对象的地址值。这不是我们要的。而重写后能够进行内容的判断,以此来去重。

4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
判断hashCode,因为通过哈希值来判断,效率高。进一步说,是因为哈希表是一个数组+链表\数组+红黑树的组合数据结构,所以具有查询效率特别高的特点。对比之下,用equals,效率太低。所以通过一个高效不够严谨的hashCode进行快速筛选,剩余部分,再通过equals来进行内容判断,达到高效又准确的去重效果。

5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法
被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现
此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中
的键或有序集合中的元素,无需指定比较器
Comparator强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或
Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或
有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。
回复 使用道具 举报
林少伟
回复 使用道具 举报
123
您需要登录后才可以回帖 登录 | 加入黑马