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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 厦门校区   /  2018-6-23 20:59  /  2683 人查看  /  34 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

吴香斌

1.List接口下都有哪些集合,他们各自有什么特点
  1)ArrayList: 底层为数组,有序,有索引值,查询快,增删慢
  2)LinkedList:底层为双向链表,有序,有假索引值,查询慢,增删快,可以对链表的开头和结尾进行操作
  3)Vector:底层为数组,线程安全,效率低.
   
2.Set接口下的集合是如何保证无序不可重复的

  Set接口下的集合底层是哈希表数据结构,哈希表是由数组,链表,红黑数组成.通过比较哈希值和使用equals方法,保证了元素的不重复.
因为存储模式是同一哈希值存储在同一链表或者同一红黑树下,因此存取都是无序的.

3.我们为什么要重写HashCode( )和equals()方法?

  因为Object中的HashCode()是根据地址值换算出来的一个值,没有起到比较的作用.
  Object中的equals方法都是只对地址值进行比较,没有对内容进行比较.

4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
  先判断HashCode(),然后再判断equals().  因为Set集合的底层是哈希表数据结构,哈希表是由数组+链表+红黑树组成,先根据HashCode()判断哈希值是否相同,再将哈希值相同的使用equals进行最终判断.哈希值相同equals不同的元素会在同一个链表或者红黑树中,因此要先判断HashCode().

5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?

  Comparable是内部比较器,存在于类中,Comparable是固定,对于无法修改的类,Comparable就达不到开发人员的需求.
  Comparator是外部比较器,是自定义的工具,比较灵活,可以根据开发人员的需求,进行改动.
  就灵活性及适用性而言,Comparator是使用频率比较高的.


回复 使用道具 举报
贾宗虎

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是外比较器,使用的比较多,因为更灵活.使用一般分两种情况:
    ①本身没有比较规则,但现在需要进行比较,使用外比较器
    ②本身有比较规则,但现在要用另一种规则进行比较,用外比较器



点评

腋太美同学很棒!  发表于 2018-6-24 21:46
回复 使用道具 举报
谢精良
1.ArrayList是数组结果,查询快增删慢。LinkedList是链表结果,查询慢增删快。Vector集合:是数组结构,线程安全但效率低下。

2.主要是通过HashCode方法和equals方法来实现无重复的

3.如果没有重写HashCode()和equals()的话 当使用方法时比较的是地址值的比较而不是内容。

4.先判断HashCode(),因为相对于元素内容,哈希值的重复率更低,先通过判断哈希值来存储数据的效率更高

5.Comparator使用的比较多,因为Comparable比较死板。而Comparator采用匿名内部类的形式对该接口的compare方法进行重写,比较灵活。
回复 使用道具 举报
谢精良
1.ArrayList是数组结果,查询快增删慢。LinkedList是链表结果,查询慢增删快。Vector集合:是数组结构,线程安全但效率低下。

2.主要是通过HashCode方法和equals方法来实现无重复的

3.如果没有重写HashCode()和equals()的话 当使用方法时比较的是地址值的比较而不是内容。

4.先判断HashCode(),因为相对于元素内容,哈希值的重复率更低,先通过判断哈希值来存储数据的效率更高

5.Comparator使用的比较多,因为Comparable比较死板。而Comparator采用匿名内部类的形式对该接口的compare方法进行重写,比较灵活。
回复 使用道具 举报
1.List接口下都有哪些集合,他们各自有什么特点
(1)ArrayList集合增删慢,查找快;
(2)LinkeList集合增删快,查找慢;
(3)vertor集合增删慢,查找快;
2.Set接口下的集合(⊙o⊙)…是如何保证无序不可重复的
通过HashCode( )和equals()方法,元素先产生哈希值,当哈希值与集合中其他元素的哈希值不重复时,则存入集合,当产生冲突,就通过equals()方法来比较元素,如果不同则存入,相同则不存入来保证元素的唯一性。
3.我们为什么要重写HashCode( )和equals()方法?
给HashSet中存放元素时,为保证元素的唯一性,就需要重写HashCode( )和equals()方法。
4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
先判断HashCode()再判断equals(),因为元素在存入前先产生哈希值,当产生的哈希值与集合中元素的哈希值不同时就存入集合中,当出现相同时同equals()判断两个元素是否相同,如果相同,则不存入集合,不同则存入集合中,保证集合元素的唯一性
5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么
Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法
被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现
此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中
的键或有序集合中的元素,无需指定比较器。
Comparator强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或
Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或
有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。
Comparator接口使用较多,方法比较灵活,可以根据自己意愿来对元素进行排序;
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马