List Vs Set Vs Map
1) 重复性
- List 允许有重复元素。任何数量的重复元素都可以在不影响现有重复元素的值及其索引的情况下插入到 List。
- Set 不允许重复。Set 以及所有实现了 Set 接口的类都不允许重复值的插入。
- Map 以键值对的形式对元素进行存储。Map 不允许重复键但允许重复值。
2) 空值
- List 允许任意数量的空值。
- Set 最多允许一个空值的出现。
- Map 只允许出现一个空键但允许任意数量的空值。
3) 排序
- List 及其所有实现类保持了每个元素的插入顺序。
- Set 中的元素都是无序的;但某些 Set 的实现类以某种顺序对其中的元素进行排序,比如 LinkedHashSet 按照元素的插入顺序进行排序。
- Map 跟 Set 一样对元素进行无序存储,但其某些实现类对元素进行了排序。比如,TreeMap 依据键对其中的元素进行升序排序而 LinkedHashMap 则按照每个元素的插入次序进行排序。
4) 常用实现类
- List:ArrayList、LinkedList 等等。
- Set:HashSet、LinkedHashSet、TreeSet、SortedSet 等等。
- Map:HashMap、TreeMap、WeakHashMap、LinkedHashMap、IdentityHashMap 等等。
什么时候使用 Java 里的 List、Set 和 Map?
1) 如果你的数据不允许有重复值,Set 是最适合的选择,因为其所有实现类都不允许有重复值。2) 如果需要经常根据元素的索引值进行一些查询操作,那么 List(ArrayList)将是一个不错的选择。
3) 如果需要保留每个元素的插入次序,那么还是首选 List。
4) 如果你的数据需要进行 key - value 映射,那么就是 Map 了。
原文链接:http://beginnersbook.com/2015/01/difference-between-list-set-and-map-in-java/
http://blog.csdn.net/defonds/article/details/47837867