贾宗虎
1.List接口下都有哪些集合,他们各自有什么特点
List接口下有: LinkedList,ArrayList,Vector
LinkedList的特点是链表结构的集合,具有查找慢,增删快的特点,独有几个和头部尾部相关的方法,例如:getFirst(),removeFirst(),getLast(),removeLast()
ArrayList是数组结构的集合,具有查找快,增删慢的特点.也是我们开发当中,使用最多的数据结构.
Vector老师说这个效率太低,基本已经被淘汰了.
2.Set接口下的集合是如何保证无序不可重复的
通过hashCode()方法和equals()方法
首先当集合接受到一个数据的时候,用hashCode()方法判断数据的哈希值,是否在集合中已存在,如果没有,则存入集合中.如果有,在通过equals()方法比较,不一样则存入集合,一样的话则不存.
3.我们为什么要重写HashCode( )和equals()方法?
如果集合要接受的数据类型是自定义类的对象的话,这里有两种情况:
①默认比较的是地址值.一样则不存,不一样则存储在被比较元素的下面(以链表的形式,超过阈值转换为红黑树结构)
②自定义equals方法比较对象的成员变量是否一样,例如比较两个人,通常我们认为两个人是否是同一个人,看他们的姓名,身高,年龄等等属性是否一样.就需要重写equals方法.
4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
先判断hashCode(),获取接受元素的哈希值,判断集合里如果没有该值,就可以直接存进去,不需要equals()方法判断,提高存取效率
5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
Comparable是内比较器,定义在类中,重写继承过来的默认比较规则,适用于永不改变的规则.比较不灵活
Comparator是外比较器,使用的比较多,因为更灵活.使用一般分两种情况:
①本身没有比较规则,但现在需要进行比较,使用外比较器
②本身有比较规则,但现在要用另一种规则进行比较,用外比较器
|
|
|