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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.List接口下都有哪些集合,他们各自有什么特点
(1)ArrayList:数据存储的结构是数组结构,元素有序,允许重复元素,增删慢,但查找快.
(2)LinkedList:是一个双向链表,集合数据存储的结构是链表结构.元素有序.方便元素增删,但查找慢.。在开发时,LinkedList集合也可以作为堆栈,队列的结构使用.


2.Set接口下的集合是如何保证无序不可重复的
调用被添加元素的hashCode(),和HashSet中已有元素的hashCode比较是否相同,如果不相同,直接存储, 如果相同,调用equals方法比较是否相同,不相同,直接存储元素,相同,认为是同一元素.不存储



3.我们为什么要重写HashCode( )和equals()方法?
因为给HashSet中存放自定义类型元素时,需要重写对象中的hashCode和equals方法,建立自己的比较方式,才能保证HashSet集合中的对象唯一


4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
先判断hashCode(),如果hashcode相同在判断equals().二者都相同才会判定元素相同,这样做的方法效率高,而且避免的hash碰撞导致误判元素重复.



5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
(1)区别:
       Comparable强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法
被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。

       Comparator强行对某个对象进行整体排序。可以将Comparator 传递给sort方法
(如Collections.sort或Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序
(2)Comparator使用的多,因为comparable要修改比较方式的话要直接修改类,这样的做法对代码的维护很不有好





回复 使用道具 举报
1.List接口下都有哪些集合,他们各自有什么特点
有ArrayList集合,特点:查找快,增删慢
LinkedList集合,特点:查找慢,增删快
2.Set接口下的集合是如何保证无序不可重复的
在数组 + 链表/红黑树的多重判断下
3.我们为什么要重写HashCode( )和equals()方法?
HashCode():为了防止哈希碰撞
equals():该方法对比的是对象的地址值,没有太大意义
4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
先判断哈希值,因为如果出现了哈希碰撞,需要equals再次判断内容是都相同
5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
Comparable是原本就定义好的,而Comparator需要自己定义。
Comparable接口使用的多,理由如上,普通情况下使用比较方便。
回复 使用道具 举报
spik 中级黑马 2018-8-14 21:28:04
23#
1.List接口下都有哪些集合,他们各自有什么特点
ArrayList: 底层居于数组的栈类型结构,查询速度快,增删效率低。
LinkedList:底层居于链表格式类型的结构,查询速度慢,增删快。
Vector:同ArrayList,但是操作是单线程的,效率低。

2.Set接口下的集合是如何保证无序不可重复的


Set通过hashCode和equals方法实现元素不重复。
由于是通过哈希值来确定元素的存储位置,所以是无序的。


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


默认的HashCode() 方法比较的是默认的对象地址值,为了确保对象的唯一性,需要重写HashCode()和equals()方法。


4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?


先判断HashCode,在HashCode不同的时候才调用equals()方法。hashcode是调用根据哈希算法的本地方法产生哈希值,比较能确保唯一性,效率高。




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


comparable 强行对实现它的每个类的对象进行整体排序,不能修改类的代码实现自己想要的排序,
用Collections.sort或者Arrays.sort进行自动排序,无需指定比较器
Comparator 可以将 Comparator 传递给sort方法,从而允许在排序顺序上实现精确控制。







lijionghua


回复 使用道具 举报
spik 中级黑马 2018-8-14 21:29:07
24#
1.List接口下都有哪些集合,他们各自有什么特点
ArrayList: 底层居于数组的栈类型结构,查询速度快,增删效率低。
LinkedList:底层居于链表格式类型的结构,查询速度慢,增删快。
Vector:同ArrayList,但是操作是单线程的,效率低。


2.Set接口下的集合是如何保证无序不可重复的

Set通过hashCode和equals方法实现元素不重复。
由于是通过哈希值来确定元素的存储位置,所以是无序的。



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

默认的HashCode() 方法比较的是默认的对象地址值,为了确保对象的唯一性,需要重写HashCode()和equals()方法。


4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?

先判断HashCode,在HashCode不同的时候才调用equals()方法。hashcode是调用根据哈希算法的本地方法产生哈希值,比较能确保唯一性,效率高。


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

comparable 强行对实现它的每个类的对象进行整体排序,不能修改类的代码实现自己想要的排序,
用Collections.sort或者Arrays.sort进行自动排序,无需指定比较器
Comparator 可以将 Comparator 传递给sort方法,从而允许在排序顺序上实现精确控制。

lijionghua
回复 使用道具 举报
1.List接口下都有哪些集合,他们各自有什么特点
(ArrayList)用于查询数据,遍历数据,增删慢。
(LinkedList)数据存储的机构是链表结构,便于增加/删除集合元素。
(Vector)类提供额外的方法来增加、删除元素,比数组操作高效。 使用的时候无须声明上限,随着元素的增加,Vector的长度会自动增加。
2.Set接口下的集合是如何保证无序不可重复的
hashCode 与 equals 方法保证元素唯一性;HashSet 是 Set 接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的
回复 使用道具 举报
spik 中级黑马 2018-8-14 21:30:53
26#
1.List接口下都有哪些集合,他们各自有什么特点
ArrayList: 底层居于数组的栈类型结构,查询速度快,增删效率低。
LinkedList:底层居于链表格式类型的结构,查询速度慢,增删快。
Vector:同ArrayList,但是操作是单线程的,效率低。


2.Set接口下的集合是如何保证无序不可重复的

Set通过hashCode和equals方法实现元素不重复。
由于是通过哈希值来确定元素的存储位置,所以是无序的。



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

默认的HashCode() 方法比较的是默认的对象地址值,为了确保对象的唯一性,需要重写HashCode()和equals()方法。


4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?

先判断HashCode,在HashCode不同的时候才调用equals()方法。hashcode是调用根据哈希算法的本地方法产生哈希值,比较能确保唯一性,效率高。


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

comparable 强行对实现它的每个类的对象进行整体排序,不能修改类的代码实现自己想要的排序,
用Collections.sort或者Arrays.sort进行自动排序,无需指定比较器
Comparator 可以将 Comparator 传递给sort方法,从而允许在排序顺序上实现精确控制。

lijionghua
回复 使用道具 举报
1。ArrayList集合查询快,增删慢 LinkedList查找慢,增删快
2.根据hashCode与equals方法
3.hasCode 比较的是哈希值. equals比较的是对象地址值
4.先判断hashCode在判断equals, 先判断哈希值是否重复,在比较内容是否相同
5.Comparable是自已完成比较,Comparator是外部程序实现比较。Comparable接口使用的多,理由如上,普通情况下使用比较方便

孙享
回复 使用道具 举报
1.List接口下都有哪些集合,他们各自有什么特点

ArrayList,LinkedList。有序,可重复,有索引。

2.Set接口下的集合是如何保证无序不可重复的

根据哈希值来确定元素在集合中的位置,根据Hascode和equals方法来保证元素的唯一性


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

因为在集合中每次创建出的对象都有唯一的地址值,所以即使内容完全一样也无法来判断是否内容重复。


4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?

先判断HashCode()。HashCode()判断的是地址值,地址值是唯一的,可以提高速度。


5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
Comparable为自然排序、
Comparator可以实现精确控制,也可以为那些没有自然顺序的对象提供排序。
如果使用频率高使用comparable
如果需要制定特殊的比较规则这使用comparator

--李翔



回复 使用道具 举报
1.List接口下都有哪些集合,他们各自有什么特点
(1)Arrraylist集合时用的最多的集合 是数组结构 查找快 增删慢
LinkedList集合是双向链表 增删快 查找慢 所以有一些操作首尾的方法
2.Set接口下的集合是如何保证无序不可重复的
用hashCode方法和equals方法
3.我们为什么要重写HashCode( )和equals()方法?
为了防止集合中元素重复
4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
先判断HashCode,若是哈希值相同,再判断equals()方法,因为哈希值不同就直接不用存储
5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
Comparable是自己和别人比,比较需要实现接口Comparable,重写compareTo方法,适用于高频率排序的类,不用找比较器
Comparator是第三方,也就是比较器,不需要实现接口,灵活制定比较规则
回复 使用道具 举报
1.List接口下都有哪些集合,他们各自有什么特点
   ArrayList  是以数组结构存储数据的
   LinkedList  是以链表结构存储数据的
2.Set接口下的集合是如何保证无序不可重复的
  Set接口下的集合是按照某种规则排列。无索引,所以称为无序。
  通过哈希值的比较和内容的比较去除相同的元素。
  先比较元素的哈希值,不同则直接存储,相同再用equals方法比较内容,如果仍相同则不储存,不同则储存。
3.我们为什么要重写HashCode( )和equals()方法?
  equals()方法原来是比较地址值,没有意义,重写后为比较内容。
  HashCode()方法原是本地方法给的哈希值,当内容相同时哈希值可能不同,不适用,重写后当内容相同时,所得的哈希值相同,可以排重更适用。
4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
  先判断
HashCode(),后判断
equals(),因为比较值的执行效率比比较内容的效率更高,运行更快。

  当HashCode()不同时,就不用再判断equals()方法了。
5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
  Comparable需要被实现,才能使用。
   Comparator不需实现。
   Comparator接口使用的多,因为它不需实现接口,更灵活。
回复 使用道具 举报
1.List接口下都有哪些集合,他们各自有什么特点
Vector;ArrayList;LinkedList;
1、有序;2、可以有重复元素;3、有索引值;
2.Set接口下的集合是如何保证无序不可重复的
重写hashCode()和equals()方法,当哈希值不同是直接储存元素,否则调用equals()比较内容,内容相同时不储存,不同是储存元素;
3.我们为什么要重写HashCode( )和equals()方法?
只有重写重写hashCode()和equals()方法才能保证元素的唯一性;
4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
先判断hashCode(),当哈希值相同时才判断equals(),哈希值为int类型,判断更快速;
5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
一定要实现comparable接口和重写comparaTo()方法才能使用sort()方法,
而Comparator不需要实现。comparator接口使用的多,因为可以使用内部匿名类而不用到类中修改判断条件;




回复 使用道具 举报

1.List接口下都有哪些集合,他们各自有什么特点
ArrayList集合查找快,增删慢,
LinkedList集合1.底层是一个链表结构,查找慢,增删快。里面包含大量操作首尾元素的方法
2.Set接口下的集合是如何保证无序不可重复的
没有索引,所有是一个无序集合
3.我们为什么要重写HashCode( )和equals()方法?
equals()方法默认比较的是两个对象的地址值,无意义,所有需要重新写
HashCode( )方法,防止哈希碰撞情况发生
4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
先判断哈希值,因为哈希值判断完之后还会判断内容是否相等
5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
区别在于一个已经定义好的,一个需要自己定义的,
如果没有特殊必要Comparable使用较多,
如非必要,基本不使用Comparator。
回复 使用道具 举报
spik 中级黑马 2018-8-14 21:41:38
33#
1.List接口下都有哪些集合,他们各自有什么特点
ArrayList: 底层居于数组的栈类型结构,查询速度快,增删效率低。
LinkedList:底层居于链表格式类型的结构,查询速度慢,增删快。
Vector:同ArrayList,但是操作是单线程的,效率低。

2.Set接口下的集合是如何保证无序不可重复的

Set通过hashCode和equals方法实现元素不重复。
由于是通过哈希值来确定元素的存储位置,所以是无序的。

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

默认的HashCode() 方法比较的是默认的对象地址值,为了确保对象的唯一性,需要重写HashCode()和equals()方法。

4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?

先判断HashCode,在HashCode不同的时候才调用equals()方法。hashcode是调用根据哈希算法的本地方法产生哈希值,比较能确保唯一性,效率高。

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

comparable 强行对实现它的每个类的对象进行整体排序,不能修改类的代码实现自己想要的排序,
用Collections.sort或者Arrays.sort进行自动排序,无需指定比较器
Comparator 可以将 Comparator 传递给sort方法,从而允许在排序顺序上实现精确控制。

lijionghua
回复 使用道具 举报
1.List接口下都有哪些集合,他们各自有什么特点

ArrayList:底层的数据结构使用的是数组结构;特点:查找快,但增加删除慢。
LinkedList:底层使用的是链表数据结构;特点:增删速度快,但是查找修改慢。
Vector:底层是数组结构,和ArraysList功能一样,但是Vector是同步的,ArraysList是不同步。被ArrayList替代。

2.Set接口下的集合是如何保证无序不可重复的

Set是一个接口,常用的Set实现类那就是HashSet了。
-------------------------------------------------
public HashSet() {
map = new HashMap<E,Object>();
    }

-------------------------------------------------

这是HashSet的构造方法。 可以看到HashSet内部其实就是一个HashMap 。

因为HashMap在put一个Key时会判断,将要放进去的Key的hash值与目前HashMap中定位到的那个Key的hash值比较。

如果hash值相当,继续比较 这两个对象的地址或者内容是否相当。

如果相当:判断出来要添加的Key与HashMap中的Key重复,把Value的值给替换成最新的。

HashSet中的Value是一个固定值PRESENT。 所以修改不修改无所谓。


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


    首先equals与hashcode间的关系是这样的:

    1、如果两个对象相同(即用equals比较返回true),那么它们的hashCode值一定要相同;

    2、如果两个对象的hashCode相同,它们并不一定相同(即用equals比较返回false)   


    由于为了提高程序的效率才实现了hashcode方法,先进行hashcode的比较,如果不同,那没就不必在进行equals的比较了,这样就大大减少了equals比较的次数,这对比需要比较的数量很大的效率提高是很明显的,一个很好的例子就是在集合中的使用;

    我们都知道java中的List集合是有序的,因此是可以重复的,而set集合是无序的,因此是不能重复的,那么怎么能保证不能被放入重复的元素呢,但靠equals方法一样比较的话,如果原来集合中以后又10000个元素了,那么放入10001个元素,难道要将前面的所有元素都进行比较,看看是否有重复,这个效率可想而知,因此hashcode就应遇而生了,java就采用了hash表,利用哈希算法(也叫散列算法),就是将对象数据根据该对象的特征使用特定的算法将其定义到一个地址上,那么在后面定义进来的数据只要看对应的hashcode地址上是否有值,那么就用equals比较,如果没有则直接插入,只要就大大减少了equals的使用次数,执行效率就大大提高了。

    继续上面的话题,为什么必须要重写hashcode方法,其实简单的说就是为了保证同一个对象,保证在equals相同的情况下hashcode值必定相同,如果重写了equals而未重写hashcode方法,可能就会出现两个没有关系的对象equals相同的(因为equal都是根据对象的特征进行重写的),但hashcode确实不相同的。

4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?

    就跟之前题目提到的为什么重写hashCode和equals里面说到的,
hashCode的重写保证了元素的唯一性,而hashCode的值是int类型,数值比较的运算速度远远快于内容的比较速度,越是优秀的算法,哈希碰撞的概率越小,这样就大大减少了equals的使用次数,执行效率
就大大提高了。


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


    Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。

    Comparator强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。
    Compatator使用的多,因为可以实现自己想要的排序的排序方法,而Comparable,只有自一种然比较方法,不能满足我们不同的排序需求。


回复 使用道具 举报

1.List接口下都有哪些集合,他们各自有什么特点
ArrayList集合查找快,增删慢,
LinkedList集合1.底层是一个链表结构,查找慢,增删快。里面包含大量操作首尾元素的方法
2.Set接口下的集合是如何保证无序不可重复的
先比较hash值,相同再equal比较true则元素相同不存储
3.我们为什么要重写HashCode( )和equals()方法?
重写HashCode( )方法给元素唯一的哈希值,equals()不重写比较的是地址值无意义。
4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
先判断HashCode(),Hash值是唯一值,只有发生哈希碰撞时才需要对元素进行内容判断,更省内存
5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
Comparable:强行对实现它的每个类的对象进行整体排序。Comparator:强行对某个对象进行整体排序。
Comparator用的多,方法的重写只对当前对象产生影响,更加灵活。
回复 使用道具 举报
1.List接口下都有哪些集合,他们各自有什么特点
list接口下有:
ArrayList :
底层是数组结构,查询快,增删慢

LinkedList:
特点:1.底层是双向链表结构,查询慢,增删快
2.包含大量操作首尾元素的方法
3.不能使用多态

2.Set接口下的集合是如何保证无序不可重复的


保证元素唯一性的方式依赖于: hashCode 与 equals
先判断hashcode(),如果不相同直接存储,相同再比较equals(),不相同继续存储,如果还相同就不存储。

3.我们为什么要重写HashCode( )和equals()方法?
HashCode( )和equals()是系统默认给出的随机哈希值,容易发生哈希碰撞,所以需要重写。


4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?

先判断hashcode(),如果不相同直接存储,相同再比较equals(),不相同继续存储,如果还相同就不存储
不同就直接存储,提高存储效率。

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

Comparator使用的多,因为Comparator不需要实现接口,更加灵活。

回复 使用道具 举报

1.List接口下都有哪些集合,他们各自有什么特点
ArrayList:数组集合,查询快,增删慢。   LinkedList:链表集合,查询慢,增删快。
2.Set接口下的集合是如何保证无序不可重复的
通过hash值和equals方法进行判定重复性
3.我们为什么要重写HashCode( )和equals()方法?
为了制定我们想要的规则
4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
先判断hashCode,因为该值是基本数据类型,判断更迅捷。
5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么
Comparator用的多,因为改变规则时不需要在实现类中修订/重写方法。
回复 使用道具 举报
1.List接口下都有哪些集合,他们各自有什么特点
     ArrayList:有序,有索引,元素可重复,数据结构是数组,查询快,增删慢
     LinkedList:有序,有索引,元素可重复,数据是链表结构,查询慢,增删快
     Vector:有序,有索引,元素可重复,
2.Set接口下的集合是如何保证无序不可重复的
     使用hashcode方法和equals方法
3.我们为什么要重写HashCode( )和equals()方法?
  保证set接口下的集合中的元素不会重复
4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
     先判断hashcode();哈希值是十进制的,判断起来比较节约系统资源,
5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
     Comparator:相当于找一个第三方的裁判比较两个;Comparable:自己(this)和别人(参数)比较,自己需要实现                 Comparable接口,重写比较的规则compareto方法,
comparator用的比较多,因为他制定规则比较灵活
     




回复 使用道具 举报
3.我们为什么要重写HashCode( )和equals()方法?
答:如果我们往集合中存放自定义的对象,那么保证其唯一, 就必须复写hashCode和equals方法建立属于当前对象的比较方式。
4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
答:先判断HashCode(),只有HashCode返回值冲突的时候才会调用equals方法进行判断。
5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
答:Comparable:自己(this)和别人(参数)比较,自己需要实现Comparable接口,重写比较的规则compareTo方法
答:Comparator:相当于找一个第三方的裁判,比较两个
回复 使用道具 举报
1.ArrayList合集数据存储的结构是数组结构。特点:元素增删慢,查找快。
LinkedList合集数据的结构是链表结构。特点:方便元素添加,删除的合集。
2.HashSet是Set接口的一个现实类,它所存储的元素是不可重复的(是由hashCode和equals方法决定的),并且元素都是无序的
3.因为Object的equal方法默认是两个对象的引用的比较,意思就是指向同一内存,地址则相等,否则不相等;如果你现在需要利用对象里面的值来判断是否相等,则重载equal方法。 当equal相等时,hashCode必 须相等,而且如果是object对象,必须重载hashCode和equal方法
4.先判断HashCode()因为不同的对象可能会生成相同的hashcode值,如果要判断两个对象是否真正相等,必须通过equals方法。
5.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马