.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.什么是泛型?使用泛型有什么好处?
答:它的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型。
好处: - 把运行时期的问题提前到了编译期间
- 避免了强制类型转换 |