List(对付顺序的好帮手):

List:
1.可以允许重复的对象。
2.可以插入多个null元素。
3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。
4.常用的实现类有 ArrayList、LinkedList 和 Vector。
ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。
总结:List接口存储一组不唯一(可以有多个元素引用相同的对象),有序的对象。

Set(注重独一无二的性质):

Set:
1.不允许重复对象
2.无序容器,无法保证每个元素的存储顺序,TreeSet通过Comparator或者Comparable 维护了一个排序顺序
3. 只允许一个 null 元素
4. Set 接口最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。
最流行的是基于HashMap实现的HashSet;TreeSet 还实现了SortedSet接口,
因此 TreeSet 是一个根据其 compare() 和 compareTo() 的定义进行排序的有序容器。
总结:不允许重复的集合。不会有多个元素引用相同的对象。

Map(搜索的专家):

Map:
1.Map不是collection的子接口或者实现类。Map是一个接口。
2.Map 的 每个 Entry 都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值对象但键对象必须是唯一的。
5. TreeMap 也通过 Comparator 或者 Comparable 维护了一个排序顺序。
6. Map 里你可以拥有随意个 null 值但最多只能有一个 null 键。
5.Map接口流行的几个实现类是 HashMap、LinkedHashMap、Hashtable 和 TreeMap。(HashMap、TreeMap最常用)。
总结:使用键值对存储,Map会维护与Key有关联的值;
两个Key可以引用相同的对象但Key不能重复,String是典型的Key,但也可以是任何对象。

List,Set,Map的使用场景

如果经常使用索引来对容器中的元素进行访问,应当选择List。如果已经知道使用了索引,那么 List 的实现类比如ArrayList 可以提供更快速的访问,如果需要经常添加删除元素,要选择LinkedList。如果想要容器中的元素能够按照它们插入的次序进行有序存储仍要选用List,因为 List 是一个有序容器,它按照插入顺序进行存储。

如果你想保证插入元素的唯一性,也就是你不想有重复值的出现,可以选择一个 Set 的实现类,比如 HashSet、LinkedHashSet 或者 TreeSet。所有 Set 的实现类都遵循了统一约束比如唯一性,而且还提供了额外的特性,比如 TreeSet 还是一个 SortedSet,所有存储于 TreeSet 中的元素可以使用 Java 里的 Comparator 或者 Comparable 进行排序。LinkedHashSet 也按照元素的插入顺序对它们进行存储。

如果以键和值的形式进行数据存储应该选择Map。可以根据后续需要从 Hashtable、HashMap、TreeMap中进行选择。