如何回答关于List和Set的问题

 首先,先关注其共同点。编程

  List和Set都是继承自Collection接口
  接下来咱们着重分析它们的不一样点。函数

  List特色:元素有放入顺序,元素能够重复;优化

  Set特色:元素无放入顺序,元素不可重复(注意:元素虽然没有放入顺序,可是元素在set中的位置是有该元素的HashCode决定的,其位置是固定的) 。
  List接口三个经常使用实现类:LinkedList,ArrayList,Vector ;设计

  Set接口三个经常使用实现:HashSet(底层由HashMap实现),LinkedHashSet,TreeSet。code

List (inteface) 
次序是List 的最重要特色,它确保维护元素特定的顺序。
ArrayList 容许对元素快速随机访问。
LinkedList 对顺序访问进行优化,向List 中间插入与移除的开销并不大,具备addFrist(),addLast(),getFirst(),getLast(),removeFirst()和removeLast()。这些方法使得LinkedList可看成堆栈/队列/双向队列。
Set (inteface) 
存入Set 的每一个元素必须惟一,不保证维护元素的次序.加入Set 的Object必须定义equals()方法 。
HashSet 为快速查找而设计的Set ,存入HashSet对象必须定义hashCode()。
TreeSet  保护次序的Set ,使用它能够从Set 中提取有序序列。
LinkedHashSet  具备HashSet的查询速度,且内部使用链表维护元素的次序。
它们之间的存储方式不同: 
TreeSet采用红黑树的树据结构排序元素. 
HashSet采用散列函数,这是专门为快速查询而设计的. 
LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素的次序. 
使用HashSet/TreeSet时,必须为定义equals();而HashCode()是针对HashSet,做为一种编程风格,当覆盖equals()的时候,就应该同时覆盖hashCode().对象

相关文章
相关标签/搜索