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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 厦门校区   /  2019-4-24 16:50  /  3371 人查看  /  58 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.Set接口下的集合是如何保证无序不可重复的
答:
哈希表保证的。

2.我们为什么要重写HashCode( )和equals()方法?
答:
要保证Set集合的元素不可重复

3.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
答:
先判断HashCode()。因为先判断equals()的话,它会判断每一个数据的值,会减慢程序运行的效率,引入HashCode()可以先比较哈希值,如果哈希值相同则不需要比较每一个数据的值,大大提升了程序运行的效率。

4.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
答:
Comparable接口需要类先继承它,然后重写Comparetor方法
Comparator接口根据匿名内部类的形式创建,
Comparator接口使用的多,因为Comparable的耦合性太强

5.什么是泛型?使用泛型有什么好处?
答:
定义类、方法、接口的时候,指定的未知的数据类型
好处:
1、将运行时期的异常提前到了代码编译时期
2、避免了强转的麻烦,而且可以使用元素特有的方法
回复 使用道具 举报
1.Set接口下的集合是如何保证无序不可重复的
   Set集合是用哈希表存储元素的所以是无序的;
(1)首先先计算存入元素的哈希值,根据哈希值算出存储位置,
如果该位置有元素,再比较哈希值,如果该位置没有元素,直接存储
(2)如果哈希值相同,调用equals方法比较元素的内容,
如果内容相同不存储,否则内容不同存储


2.我们为什么要重写HashCode( )和equals()方法?
HashCode()和equals()默认继承至Object;
Object的计算和比较方式通常都不能满足我们的需求,所以需要重写;

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

数据在存入Set集合的时候,先判断HashCode()
因为哈希值是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值,
若哈希值不同则对象一定不相同,与equals()方法相比效率高,在哈希值相同

的情况下才判断equals(),判断对象内容是否相同


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

Comparable:实体类实现此接口,重写compare To(T o)方法,定义比较规则
Comparator:测试类中采用匿名内部类方式创建,重写compare(T o1,T o2)方法,定义比较规则
Comparator接口使用的较多,因为Comparable比较规则和定义实体类绑定在了一起,耦合度高,不利于后期维护

5.什么是泛型?使用泛型有什么好处?
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数
(1).将集合存储元素,对元素进行类型强转,异常提前到了编译期
(2).避免了强转的麻烦
回复 使用道具 举报
1.Set接口下的集合是如何保证无序不可重复的
在添加元素时重写了HashCode( )和equals()
2.我们为什么要重写HashCode( )和equals()方法?
不重写无法进行比较
3.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
先判断HashCode()调用的时候默认先调用这个方法,这样可以节省性能.
4.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
Comparable在实体类去实现接口,Comparator在创建TreeSet集合的时候;Comparator用的比较多,Comparable在实体类耦合性太高了,容易出错.
5.什么是泛型?使用泛型有什么好处?
将集合存储元素,对元素进行类型强转,好处是异常提前到了编译期
回复 使用道具 举报
1.Set接口下的集合是如何保证无序不可重复的
   Set集合是用哈希表存储元素的所以是无序的;
(1)首先先计算存入元素的哈希值,根据哈希值算出存储位置,
如果该位置有元素,再比较哈希值,如果该位置没有元素,直接存储
(2)如果哈希值相同,调用equals方法比较元素的内容,
如果内容相同不存储,否则内容不同存储


2.我们为什么要重写HashCode( )和equals()方法?
HashCode()和equals()默认继承至Object;
Object的计算和比较方式通常都不能满足我们的需求,所以需要重写;

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

数据在存入Set集合的时候,先判断HashCode()
因为哈希值是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值,
若哈希值不同则对象一定不相同,与equals()方法相比效率高,在哈希值相同

的情况下才判断equals(),判断对象内容是否相同


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

Comparable:实体类实现此接口,重写compare To(T o)方法,定义比较规则
Comparator:测试类中采用匿名内部类方式创建,重写compare(T o1,T o2)方法,定义比较规则
Comparator接口使用的较多,因为Comparable比较规则和定义实体类绑定在了一起,耦合度高,不利于后期维护

5.什么是泛型?使用泛型有什么好处?
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数
(1).将集合存储元素,对元素进行类型强转,异常提前到了编译期
(2).避免了强转的麻烦
回复 使用道具 举报
1.Set接口下的集合是如何保证无序不可重复的
先用哈希值算元素的存储位置,如果位置为空则存入这个位置,如果位置不为空,则与存在的元素比较哈希值,
如果不同则存入,相同则通过equals方法比较两个元素的内容,如果不同则存入,相同不存入。

2.我们为什么要重写HashCode( )和equals()方法?
当我们使用Set集合的时候,所创建的对象内没有HashCode( )和equals()方法,则会把重复的元素存入集合中,所以要重写HashCode( )和equals()方法,保证数据唯一。

3.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
先判断Hashcode() 如果先判断equals(),则还要用HashCode方法去找存储位置,而先用HashCode如果先判断到存储位置为空,
则不用接着判断equals(),可以直接存入。

4.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
Comparable由实体类去实现接口,重写compareto方法,Comparator在创建TreeSet集合的时候作为实现类传递(匿名内部类),重写的方法不一样。
Comparator接口使用的多,Comparable接口存在较高的耦合性,不利于维护。
5.什么是泛型?使用泛型有什么好处?
指定一种类型的格式
好处:把运行时期的问题提前到了编译时期;避免了强制转换类型;
回复 使用道具 举报

今天我们继续了集合的学习,请根据自己的理解回答下面问题:

1.Set接口下的集合是如何保证无序不可重复的
首先先计算存入元素的哈希值,根据哈希值算出存储位置,如果该位置有元素,再
比较哈希值,如果该位置没有元素,直接存储。如果哈希值相同,调用equals方法
比较元素内容,如果内容相同不存储,否则内容不同存储。
2.我们为什么要重写HashCode( )和equals()方法?
重写hashCode和equals方法,建立自己的比较方式,才能保证HashSet集合中的对象唯一
3.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
4.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
重写方法不一样。后者用的比较多,前者将比较规则和定义实体类绑定在一起,耦合度高,不利于后期维护
建议拆分。
5.什么是泛型?使用泛型有什么好处?
泛型是jdk5中引入的特性,他提供了编译时类型安全监测机制,该机制允许在编译时检查到非法类型。

好处是将集合存储元素,对元素进行类型强转,异常提前到了编译期,避免了强转的麻烦。
回复 使用道具 举报
.Set接口下的集合是如何保证无序不可重复的
HashSet集合的特点
- 底层数据结构是哈希表
- 对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序一致
- 没有带索引的方法,所以不能使用普通for循环遍历
- 由于是Set集合,所以是不包含重复元素的集合

2.我们为什么要重写HashCode( )和equals()方法?
答:因为我们要比较的是具体的内容,而不是地址值。
3.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
答:先判断HashCode()

        1.根据对象的哈希值计算存储位置

            如果当前位置没有元素则直接存入

            如果当前位置有元素存在,则进入第二步

    2.当前元素的元素和已经存在的元素比较哈希值

            如果哈希值不同,则将当前元素进行存储

            如果哈希值相同,则进入第三步

    3.通过equals()方法比较两个元素的内容

            如果内容不相同,则将当前元素进行存储

            如果内容相同,则不存储当前元素

4.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
区别:
无参构造使用:Comparable
有参构造使用:Comparator
Comparator使用的多,因为Comparable和类的耦合性太高,不便于后期代码维护。
Comparator自定义类和排序规则分开,更有利于后期的排序规则维护。
5.什么是泛型?使用泛型有什么好处?
答:它的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型。
好处:        - 把运行时期的问题提前到了编译期间
                - 避免了强制类型转换
回复 使用道具 举报
1.Set接口下的集合是如何保证无序不可重复的
   Set集合是用哈希表存储元素的所以是无序的;
(1)首先先计算存入元素的哈希值,根据哈希值算出存储位置,
如果该位置有元素,再比较哈希值,如果该位置没有元素,直接存储
(2)如果哈希值相同,调用equals方法比较元素的内容,
如果内容相同不存储,否则内容不同存储


2.我们为什么要重写HashCode( )和equals()方法?
HashCode()和equals()默认继承至Object;
Object的计算和比较方式通常都不能满足我们的需求,所以需要重写;

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

数据在存入Set集合的时候,先判断HashCode()
因为哈希值是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值,
若哈希值不同则对象一定不相同,与equals()方法相比效率高,在哈希值相同

的情况下才判断equals(),判断对象内容是否相同


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

Comparable:实体类实现此接口,重写compare To(T o)方法,定义比较规则
Comparator:测试类中采用匿名内部类方式创建,重写compare(T o1,T o2)方法,定义比较规则
Comparator接口使用的较多,因为Comparable比较规则和定义实体类绑定在了一起,耦合度高,不利于后期维护

5.什么是泛型?使用泛型有什么好处?
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数
(1).将集合存储元素,对元素进行类型强转,异常提前到了编译期
(2).避免了强转的麻烦
回复 使用道具 举报
1.Set接口下的集合是如何保证无序不可重复的
答:(1)首先先计算存入元素的哈希值,根据哈希值算出存储位置,如果该位置有元素,再比较哈希值,如果该位置没有元素,直接存储
(2)如果哈希值相同,调用equals方法比较元素的内容,如果内容相同不存储,否则内容不同存储

2.我们为什么要重写HashCode( )和equals()方法?
答:不重写hashCode( )和equals()方法将会调用Object类的方法,Object的方法与地址值有关,与具体元素内容无关,不能保证存储的元素不重复。
3.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
答:先判断Hashcode() 如果先判断equals(),则还要用HashCode方法去找存储位置,而先用HashCode如果先判断到存储位置为空,
则不用接着判断equals(),可以直接存入。

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

答:Comparable接口要在实体类中实现并且重写compareTo()方法,增加了实体类和排序方法的耦合性,不利于后续的维护。
Comparator接口可以用TreeSet的带参构造进行创建匿名对象在方法实现类只用一次的情况下大大的节省了性能,并且不会和实体类产生耦合性。
所以Comparator接口使用得比较多
5.什么是泛型?使用泛型有什么好处?
答:可以在类或方法中预支的使用未知的类型。
好处:把运行时期的ClassCastException问题提前到了编译期间、避免了强制类型转换
回复 使用道具 举报

1.Set接口下的集合是如何保证无序不可重复的
答: Set集合底层是数组+链表/红黑树的结构,存入元素时会先判断哈希值,
对应数组内哈希值的位置,然后判断内容,内容不一致就以链表形式连接在一起,一致则不存入,
因此它是无序且不可重复的。

2.我们为什么要重写HashCode( )和equals()方法?
答:因为默认的HashCode()和equals()方法比较的是地址值,不能满足具体的使用。

3.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
答:先判断HashCode(),因为通过此方法将集合中的数据先进行分类,分配到链表的不同位置,在通过equals()
判断同一个位置上的数据,大大提高了代码的运行效率。

4.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
答:Comparator接口使用的比较多,因为使用使用Comparable接口需要在类中实现此接口,并重写
CompareTo方法,加强了类的耦合性,不利于程序的独立性。

5.什么是泛型?使用泛型有什么好处?
答:泛型可以认定为泛指一个类型的格式,可以看做形参。
      使用泛型可以将运行期的问题提前到编译期显示出来,也可以在使用到多种类型参数时
      避免多次定义和强制转换麻烦。
回复 使用道具 举报
123
您需要登录后才可以回帖 登录 | 加入黑马