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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

1.Set接口下的集合是如何保证无序不可重复的
①无序:无索引值,底层数据结构是哈希表,是数组+链表(红黑树)
②不可重复:Set接口底层是Map集合,
添加元素时会调用Map.put<K,V>方法,put方法中使用HashCode()方法比较了哈希值,
如果哈希值不同,则存入,不相同会调用equals()方法再次比较元素内容,如果内容不同则存入,相同则不存。


2.我们为什么要重写HashCode( )和equals()方法?
①在Set集合中,是不能存储重复元素的,而重新HashCode()和equals()方法是保证了存入集合中每个元素的不同。
②虽然单独写equals()方法也可以进行判断重复,但是添加了HashCode()方法可以提高判断的效率。


3.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
先判断HashCode(),因为HashCode()方法在比较的效率上比equals()快的多,
判断完哈希值,基本上可以排除大多数的元素是否重复,单独写equals()方法也可以进行判断重复,但是效率低。当哈希值是相同时,才再会使用equals()方法去比较其中的内容。


4.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
①Comparable使用在TreeSet的无参构造方法中,集合元素中的数据类型必须实现Comparable这个接口,并且重写CompareTo(T o)方法。
②Comparator使用在TreeSet的有参构造方法中的参数列表中,可以直接在创建TreeSet集合的时候直接使用匿名内部类的方式去传递Comparator的实现类对象,并且重写比较方法Compare(T o1,T o2);
③Comparator使用的比较多,因为可以在创建对象的时候直接修改比较方法,比较灵活,而Comparable接口的耦合性就比较强,如果多次创建对象就不是实用。


5.什么是泛型?使用泛型有什么好处?
①泛型:在定义类、方法、接口时指定的未知的数据类型,本质是数据参数化。
③泛型的好处
把运行时期的问题提前到了编译期间
避免了强制类型转换
代码复用
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马