集合和部分子类的应用场景(List、Set、Map)

集合和部分子类的应用场景(List、Set、Map)

  • List
    • LinkedList
    • ArrayList
  • Set
    • HashSet
    • TreeSet
    • LinkedHashSet
  • Map
    • HashMap
    • LinkedHashMap
    • TreeMap
    • ConcurrentHashMap

List

LinkedList

LinkedList是链表结构,不需要改变数组的大小,所以如果应用更多的插入和删除元素,更少的读取数据,LinkedList比较快。

ArrayList

ArrayList底层代码是可变数组,读取,遍历更快。如果遍历的需求比增删多,即便添加元素只是集合的末尾添加,那么ArrayList会更快。ArrayList也是开发中最常用的。

注意:事实上Arryalist增加删除没有想象中慢,删除调用CopeOf()被优化过,加上现在CPU对内容模块操作,普通大小的arrayList增加删除比LinkedList还要快!

Set

需要保证集合的元素是唯一性,选用set集合。

HashSet

开发中最常用, 主要用于去除List中重复元素,如:向不同用户多次发送不同信息时,用HashSet存储用户信息。

TreeSet

TreeSet可以进行排序的集合,数据库读取出来的数据可以进行排序。
order by asc:升序 desc:降序

LinkedHashSet

LinkedHashSet继承了HashSet的全部特性,元素不重复,快速查找,快速插入,并且新增了一个重要特性,那就是有序,可以保持元素的插入顺序,所以可以应用在对元素顺序有要求的场景中。比如在商场删除重复的商品,并保持原有的顺序输出。

Map

HashMap

HashMap在实际开发中用的非常多,是Key-value,且Key不重复的结构。在非并发操作的情况下,HashMap就可以完成正常的访问数据需求。

LinkedHashMap

在实现在HashMap的基础上,保证了数据遍历时是按照插入的顺序。因此,需要保证顺序的情境下,可以使用LinkedHashMap。

TreeMap

TreeMap能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。如果使用排序的映射,建议使用TreeMap。

注意:在使用TreeMap时,key必须实现Comparable接口或者在构造TreeMap传入自定义的Comparator,否则会在运行时抛出java.lang.ClassCastException类型的异常。

ConcurrentHashMap

ConcurrentHashMap使HashMap具有线程安全的能力。HashMap在多线程进行put操作会引起死循环,因此应选用ConcurrentHashMap。

你可能感兴趣的:(Java,java)