了解了Java内存相关的内容后,现在来简单介绍下Java的集合。

 

 

Set:不含有重复数据的集合。常用的对象HashSet,TreeSet,LinkedHashSet。HashSet拥有很好的性能,其数据是无序的。TreeSet的结构为红黑树,所以其数据是有序的,但不允许含有null。LinkedHashSet保持数据的插入顺序。

 

List:Java中常用的集合。常用的对象ArrayList,LinkedList,Vector。ArrayList多用于容量已知、随机读较多的场景。LinkedList多用于未知容量,随机写较多的场景。Vector是线程安全的。

 

Queue:多用于对数据进行FIFO(先进先出)队列的管理。常用的对象SynchronousQueue,LinkedBlockingQueue,DelayQueue。 SynchronousQueue是一个无容量的阻塞队列,每个插入操作必须等待其他线程的remove操作,反之亦然,它适合于handoff designs。DelayQueue一个元素在延迟一定时间后才被取出的阻塞队列。LinkedBlockingQueue常用的阻塞队列。

 

Deque:用于对数据进行FIFO(先进先出),LIFO(后进先出)双队列的管理。

 

Map:Java常用key/value数据结构。常用的对象ConcurrentHashMap, HashMap, Hashtable, LinkedHashMap, TreeMap。Hashtable可以说已被替换。ConcurrentHashMap用于线程安全的场景。LinkedHashMap保留了数据的插入顺序。TreeMap的key是有序的。

 

使用集合的经验:

  1. 容量确定时,一定初始化好起容量,这样可以避免集合的自动扩容。
  2. 注意集合的上限,一个是java本身int类型的限制,一个是jvm内存的限制。
  3. 集合线程安全针对的是集合结构变化时(add,delete,remove,put,resize操作),操作结果要符合预期。
  4. Jdk 1.8已经支持collection集合的聚集和并行操作(Aggregate Operations and Parallel).类似spark的RDD.这块很有意思,建议大家去看看。

 

关于集合的自动扩容算法等源码,网上以比比皆是,So,露巧不如藏拙。

posted on 2017-07-31 17:42  seven-2017  阅读(232)  评论(0编辑  收藏  举报