Java 容器

Java 容器

  • List
  • Set
  • Map
  • Queue
  • Iterator
  • 工具类
  • 并发容器
  • android中的特殊集合

相关接口

  • Iterable 代表可迭代,实现的方法需要产出一个迭代器

  • Collection 除了Map外的祖先集合接口

  • List

  • Set

  • Map

    Set 和 List都是一路继承Collection下来

    Map则是单独的

List

定义了以套通过索引进行获取,和添加的集合

  • ArrayList 内部是一个动态扩容的数组实现。
  • LinkedList 内部是一个双向链表实现
  • Vector 内部也是动态扩容的数组实现,不过大部分方法通过synchronized进行锁住方法,是线程安全的,但是效率不高。
  • Stack Vector的子类

Set

定义了一组不可重复的集合,通过哈希值来判断

  • HashSet 内部是通过一个HashMap来实现,等同于HashMap的键,值恒为同一个Object
  • TreeSet 内部是通过一个TreeMap来实现

Map

定义了通过键值映射的集合

  • HashMap 内部通过 数组 + 链表 + 红黑树进行实现的Map
  • TreeMap 内部通过红黑树进行实现,保持内部排序顺序
  • HashTable 古老实现,线程安全,效率不高
  • Properties key和value都是String类型

Queue

队列

Iterator

生成器,用于foreach循环

工具类

  • Arrays包含了许多对数组进行排序,复制等操作的工具类
  • Collections包含许多对集合进行操作
  • Comparators包含对比较器的工具

并发容器

以上中只有Vectoer和HashTable是线程安全的,但是它是将整个集合都锁住了,效率不高。

  • CopyOnWriteArryList
  • CopyOnWriteArraySet 写时复制,在写入的时候创建一个副本进行写入,当迭代多于修改,应该使用写时复制容器
  • ConcurrentHashMap
  • ConcurrentSkipListSet
  • 阻塞队列

ConcurrentMap容器:1.8以前采用锁分段技术,1.8开始使用CAS无锁技术。

android中特殊容器

SparseArray 使用稀疏数组实现的一个key为int,value为Object的集合

LongSparseArray key为long value为object

SparseLongArray key为int value为long

SparseBooleanArray key为int value为boolean

SparseIntArray key为int value为int