1.List接口下都有哪些集合,他们各自有什么特点
ArrayList的特点:底层是数组结构,查询速度快,增删速度慢;
LinkedList的特点:底层是链表结构,查询速度慢,增删速度快;
2.Set接口下的集合是如何保证无序不可重复的
当向set接口下的集合添加元素时,编译器会计算该元素的hashcode,按照hash值找到元素存储的内存区域,这样元素的存储就是无序的;同时,如果该元素的hash和集合内的某个元素一样,则调用equals方法对这两个元素进行比较,如果一致则不把该元素加入到集合中,这样就保证了元素不重复。
3.我们为什么要重写HashCode( )和equals()方法?
因为默认的HashCode()方法和equals()方法是比较地址值,无法根据元素的内容进行深一步的比较,无法保证存储元素的不可重复性,。为了保证数据的唯一性,需要重写HashCode( )和equals()方法。
4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
首先判断HashCode()方法,因为哈希值不同2个元素肯定不同,所以先获取哈希值进行判断。
而当哈希值相同的情况下,两个元素的内容有可能不同,所以这时候还需要进行equals()判断.
5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
Comparator用的比较多。
虽然用Comparable 简单, 只要实现Comparable 接口的对象直接就成为一个可以比较的对象,
但是需要修改源代码, 而用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义
的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了, 并且在Comparator 里面用户可以自
己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象,那样就可以节省很多重复劳动了。 |
|
|