Java 容器

来源:互联网 发布:耽美实体书淘宝买 编辑:程序博客网 时间:2024/06/02 02:44

Java 容器类类库的用途是”保存对象”,容器API位于 java.util包内,其中分为两个概念不同的集合,如下类图:

容器类图
图-1 容器相关类图

一、Collection:其元素是一组Object对象序列,不同自接口又有不同的规则、行为(继承和多态的应用,表现不同的行为)
  • Set 不允许有重复元素,元素没有顺序
  • List 允许有重复元素,元素必须按照插入顺序保存
  • Queue 确定对象产生的顺序(通常与插入的顺序相同),主要是用来存储数据,不是处理数据
(1)Set接口
  Set的每个元素必须是唯一的,不保证维护元素的次序,加入Set的元素必须定义equals()方法以确保对象的唯一性。Set最常被使用的是测试归属性(基于对象的值来确定归属性),可以很容易的测试某个对象是否在某个Set中。
  • HashSet:为快速查找而设计的Set,存入的元素必须定义hashCode()方法
  • TreeSet:保持次序的Set,底层为树结构(红-黑树),存入的元素必须实现Comparable接口
  • LinkedHashSet:具有HashSet的查询速度,内部使用链表维护元素的顺序(插入的次序),元素也必须定义hashCode()方法
  
(2)List接口
  List将元素维护在特定的序列中,可以在中间插入和移除元素
  • ArrayList:实现了大小可变的数组,可按索引访问元素,随机访问的时间复杂度为O(1),插入和删除元素比较慢,线程不安全的,List list=Collections.synchronizedList(new ArrayList(...));使ArrayList变成线程安全的
  • LinkedList:插入和删除元素比较快,其也是线程不安全的,可通过List list = Collections.synchronizedList(new LinkedList(...));进行包装实现同步。LinkedList还具有最为栈、队列或双端队列的方法
  • Vector:非常类似ArrayList,主要的区别就是Vector是同步的
  • Stack:继承自Vector,实现一个后进先出的容器,它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。
(3)Queue接口
  在处理元素前用于保存元素的 collection,队列是一个典型的先进先出的容器,在并发编程中非常重要。
  • LinkedList:其提供方法已支持队列的行为,它实现了Queue接口,可作为Queue的一种实现

代码

  • PriorityQueue:优先级队列下一个弹出的是最需要的元素(具有最高优先级),存入其中的元素按照自然顺序排序,或者根据构造队列时提供的 Comparator 进行排序

代码

二、Map:一组成对的”键值对”对象,不能有相同的key,一个key对应一个value,其不是Collection
  对Map中使用的键的要求和Set中的元素要求一样,任何键都必须有一个equals()方法,如果键被用于哈希Map,那么它必须还有恰当的hashCode()方法;如果键被用于TreeMap,那么它必须实现Comparable
  
(1)HashMap:如果没有其他限制,默认选择使用HashMap,因为它对速度进行了优化。基于哈希表的Map接口的实现,允许使用null值和null键,此实现是不同步的,可使用Map m = Collections.synchronizedMap(new HashMap(...));使其同步,可通过构造器设置容量和负载因子,调整容器性能
(2)HashTable:和HashMap类似,主要区别就是,它不允许为null的键值,线程同步
(3)TreeMap:基于红黑树的实现,查看 键 或 键值对 时,它们会被排序(次序由Comparable或Comparator决定),其得到的结果是经过排序的,它可使用subMap(),返回一个子树
(4)ConcurrentHashMap:一种线程安全的Map,它不涉及同步加锁
(5)WeakHashMap:一种改进的HashMap,对键实行”弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收

Java LinkedHashMap源码解析:http://liujiacai.net/blog/2015/09/12/java-linkedhashmap/
Java集合类详解 :http://blog.csdn.net/softwave/article/details/4166598
40个Java集合面试问题和答案:http://www.importnew.com/15980.html

0 0
原创粉丝点击