今天我们进一步学习了集合,请根据自己的理解回答下面问题
1.List接口下都有哪些集合,他们各自有什么特点
1)ArrayList集合:
多线程,速度快,
查询快:是一个有序的集合,能根据索引找到对应元素
增删慢:底层是数组结构
(数组结构要增删都会自动创建一个对应长度的数组,把源数组的元素交给新数组,然后把新数组的地址值交给原来的数组)
2)LinkedList
多线程,速度快,
查询慢: 链表结构,每次查询都会从第一个开始,知道找到对应元素才停止查询
增删快: 链表结构,是无序的,增删都可以在链表的每一次进行增删,增删操作对链表结构没有影响
3)Vecotr
速度慢,线程安全,意味着速度慢,会自动维护集合大的大小
实际开发用的少
2.Set接口下的集合是如何保证无序不可重复的
用hashCode方法跟equals方法去保证元素的唯一性
3.我们为什么要重写HashCode( )和equals()方法?
set集合保证元素唯一,就必须重写HashCode()和equals();
要通过hashSet存储自定义类型的元素时,为了保证集合对象的唯一性,就必须重写HashCode()和equals()
4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
HashCode()先比较地址值,地址值碰撞时,就用equals判断元素是否不相同,equals比较也不相同则存入Set集合
5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
Comparable内部比较器:必须实现Comparable,重写接口中的方法compareTo定义排序的规则
Comparator外部比较器:不用实现Comparable接口,推荐使用比较灵活(使用多)
|