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 里面用户可以自 
己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象,那样就可以节省很多重复劳动了。 |  
  
 
 
 |