1.List接口下都有哪些集合,他们各自有什么特点
Vector集合:是所有单列集合的开端
ArrayList集合:1.有序的集合2.可以存储重复元素3.有索引,包含带索引的方法
LinkedList集合:1.有序的集合2.可以存储重复元素3.有索引,包含带索引的方法
2.Set接口下的集合是如何保证无序不可重复的
前提是要重写HashCode方法和equals方法.
(1.)存储元素的时候,我们调用HashCode方法先得到元素的哈希值
(2.)再看哈希表的数组有没有这个哈希值,如果没有,就把对应的元素存进去.
(3.)如果数组里面已经有这个哈希值,则调用equals方法和对应的元素进行内容的比较,如果相同,则不存储;如果不相同,则存储在对应的元素链表下面.
总结:哈希值相同,equals比较内容也相同,则不再存储这个元素到数组中;
哈希值相同,equals比较的内容不相同,则把元素存储到相同内容元素的链表下面.
3.我们为什么要重写HashCode( )和equals()方法?
保证Set接口下的单列集合存储元素不重复.
4.数据在存入Set集合的时候,是先判断HashCode()还是先判断equals(),为什么?
先判断HashCode,因为要先知道哈希表内的数组是否存在相同的哈希值,然后再决定存不存入.而equals是知道哈希值相同后再判断两个元素的内容是否相同
5.Comparable和Comparator两个接口的区别,哪种接口使用的多,为什么?
Comparator和Comparable的区别:
Comparable:自己(this)跟别人(参数)进行比较,自己需要实现Comparable接口,并重写ComparTo方法的定义规则
Comparator:等于找一个第三方的裁判来进行比较,它里面的方法sort(List,new Compartor)来进行比较
Comparator接口 使用的多,因为不用在实现类里面定义ComparTo方法规则,耦合度比较低,定义在实现类外部,删改数据比较方便.
|