1.Set接口下的集合是如何保证无序不可重复的
通过哈希表实现的,哈希表是由链表和数组以及红黑树构成的,要添加元素时会计算元素的哈希值,再通过元素的哈希值计算元素储存的地址,如果该地址没有元素则将元素储存进去,有元素则对比两者哈希值,哈希值不一样再比较内容,如果都相同,则舍弃该元素,否则就将元素存进去,这样就可以保证元素不可重复,储存的地址是通过哈希值取余算出的,所以储存也是无序的.
2.我们为什么要重写HashCode( )和equals()方法?
重写hashCode()方法,可以实现让不同对象的哈希值相同获取哈希值的代码
重写equals()方法,可以在元素哈希值相同的情况下比较元素的内容,确保元素唯一
3.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
先判断HashCode();因为每次先判断equals()来比较会耗费资源,效率低下,而先判断HashCode可以减少调用equals()方法的次数,提高程序的执行效率
4.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
Comparable是自然排序,需要排序的对象的所属类需要继承Comparable接口,并重写compareTo()比较方法。Comparator是比较器排序,需要排序的对象的所属类不需要继承Comparator接口,compare()比较方法重写在另一个实现Comparator接口的类中。
Comparator接口使用的多,因为compare()比较方法不在需要排序的对象类中,可以根据不同的排序需求写不同的比较器方法,自然排序只能写一个。
5.什么是泛型?使用泛型有什么好处?
泛型是定义类、方法、接口的时候指定的未知的数据类型。
好处:1.避免强制类型转换
2.可以将运行期的异常提前到编译期。
|