List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。
Set集合
一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。
Set中的常见实现类有两个:
HashSet、LinkedHashSet
HashSet类实现 Set 接口,由哈希表支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
LinkedHashSet在Hashset的基础上,可以保证存进去的顺序与取出来的顺序一致;
Set集合的特点:
1、只能存一个null元素
2、不能存重复的元素(会自动去除重复的元素)
3、不保证存进去的顺序与取出来的顺序一致;
List集合的特点:
1、可以存多个null元素
2、能存重复的元素
3、能保证存进去的顺序与取出来的顺序一致;
元素唯一性的判断规则
先使用参数对象调用hashCode方法,得到参数对象的hash值,使用hash值与集合中原有对象的hash值,做比较;
如果这两个对象的hash值,不相等,直接认为这两个对象不相等;(性能提升了)
如果这两个对象的hash值,相等,会继续使用参数对象调用equals方法,再次与集合中的原有对象做比较;
如果此时equals方法得出true,会认为两个对象相等;
如果此时equals方法得出false,会认为两个对象不相等;
结论:
在自定义的类中,需要重写Object类中的HashCode方法和equals方法即可;
Object类中的HashCode方法,是根据对象的地址值生成对象的hash值;
自定义的类中重写HashCode方法后,是根据对象的属性值生成对象的hash值;
Object类中的equals方法默认是比较地址值;
自定义的类中重写equals方法后,是比较对象的属性值;
ist与Set集合的区别?
List:
它是一个有序的集合(元素存与取的顺序相同)
它可以存储重复的元素
Set:
它是一个无序的集合(元素存与取的顺序可能不同)
它不能存储重复的元素
HashSet:
元素唯一不能重复
底层结构是 哈希表结构
元素的存与取的顺序不能保证一致
如何保证元素的唯一的?
重写hashCode() 与 equals()方法
LinkedHashSet:
元素唯一不能重复
底层结构是 哈希表结构 + 链表结构
元素的存与取的顺序一致