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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

©   /  2019-6-22 17:34  /  1999 人查看  /  23 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


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

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

HashSet由哈希表保证唯一性(通过重写hashcode()和equals)
无序,因为它没有索引,不能通过索引遍历
每次取出的顺序都有可能是不同的

(哈希表是一个元素是链表/红黑树的数组,初始长度是16,扩容因子是0.75,
当数组的一个元素的链表长度超过8时,该条链表会被转换为红黑树结构,提高查询效率)  

TreeSet底层数据结构是具有自平衡的红黑二叉树,保证了唯一性,
其可以按照一定的规则排序。
没有索引,不能通过索引遍历。


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

保证集合元素的唯一性。
默认new的不同对象的hashcode()都不一样,所以要重写对象的hashcode()。
即使hashcode()相同,对象内容也会不同,所以要重写对象的equals()方法。

3.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
   
   先判断HashCode(),如果哈希值不同,则不再判断equals() 直接添加元素;
   如果哈希值相同,再判断equals(),如果equals()也相同,则为同一个元素,不添加。


4.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
  
  Comparable是在类中实现,根据其元素的自然排序进行排序
  Comparator是在构造方法中实现,创建集合的时候根据指定的比较器进行排序
  通常使用Comparator,便于维护代码,提高代码的复用性,因为标准类制作完成后,不要轻易去修改类中的代码。


5.什么是泛型?使用泛型有什么好处?
  
  泛型本质就是参数化类型。通常用T表示,指代各种参数类型
  使用泛型,可以把运行时期的问题提前到了编译时期
  避免了强制类型转换,可以简化代码,提取出通用的方案。
  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马