Java 容器
来源:互联网 发布:耽美实体书淘宝买 编辑:程序博客网 时间:2024/06/02 02:44
Java 容器类类库的用途是”保存对象”,容器API位于 java.util包内,其中分为两个概念不同的集合,如下类图:
一、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
- Java容器:容器一览
- Java容器
- Java容器
- java容器
- java容器
- Java容器
- java容器
- JAVA容器
- JAVA 容器
- java 容器
- java容器
- java容器
- java容器
- JAVA容器
- java容器
- java 容器
- java容器
- JAVA 容器
- 《windows PowerShell 实战指南》试读后感
- ndk配置教程和导入jni的include(可查看c源码)
- oracle服务器结构 总结1
- 欢迎使用CSDN-markdown编辑器
- SPOJ SUBST1(后缀数组)
- Java 容器
- iOS 导出ipa包时四个选项的意义
- 程序员学习能力提升三要素
- POJ--1979 Red and Black
- Item 50:为什么需要自定义new和delete?
- ViewPager渲染背景颜色渐变(引导页)--第三方开源--ColorAnimationView
- 陪我走过的漫长岁月---2015年总
- Install missing platform(s) and sync project编译错误解决
- Item 51:写new和delete时请遵循惯例