飞利浦·斯塔克|java容器类介绍


飞利浦·斯塔克|java容器类介绍
文章图片
飞利浦·斯塔克|java容器类介绍
1.常用容器分类
接口和抽象类Collection接口:是高度抽象出来的集合 , 它包含了集合的基本操作和属性 。 Collection包含了List和Set两大分支 。
List:是一个有序的队列 , 每一个元素都有它的索引 。 第一个元素的索引值是0 。 实现类有LinkedList ArrayList Vector Stack 。
Set:不允许有重复元素的集合 。Set的实现类有HastSet和TreeSet 。 HashSet依赖于HashMap , 它实际上是通过HashMap实现的;TreeSet依赖于TreeMap , 它实际上是通过TreeMap实现的 。
Map接口:key-value键值对 。 Map中的每一个元素包含“一个key”和“key对应的value” 。 AbstractMap抽象类:它实现了Map接口中的大部分API 。
HashMap , TreeMap , WeakHashMap都是继承于AbstractMap 。
Hashtable:虽然继承于Dictionary , 但它实现了Map接口 。
Iterator:迭代器 。 Collection依赖于Iterator , 是因为Collection的实现类都要实现iterator()函数 , 返回一个Iterator对象 。 ListIterator是专门为遍历List而存在的 。
Enumeration:是JDK 1.0引入的抽象类 。 作用和Iterator一样 , 也是遍历集合;但是Enumeration的功能要比Iterator少 。 Enumeration只能在Hashtable Vector Stack中使用 。
实现类ArrayList:是一个动态数组 , 也是我们最常用的集合 。 它允许任何符合规则的元素插入甚至包括null 。 每一个ArrayList都有一个初始容量:10 。
LinkedList:不能随机访问 , 它所有的操作都是要按照双重链表的需要执行 。
Vector:与ArrayList类似 , 但是是同步的 。
Stack:继承自Vector , 实现一个后进先出的堆栈 。 基本的push和pop方法 , 还有peek方法得到栈顶的元素 , empty方法测试堆栈是否为空 , search方法检测一个元素在堆栈中的位置 。 Stack刚创建后是空栈 。
Queue:队列 , 先入先出 , FIFO由linkedList实现 , LinkedList采用双向链表 , 本身就有addFirst addLast getFirst getLast等功能的需求 , 而队列是只是特定功能的LinkedList , 二者实现的方法都是一样 。
HashSet:堪称查询速度最快的集合 , 因为其内部是以HashCode来实现的 。 集合元素可以是null但只能放入一个null 。 它内部元素的顺序是由哈希码来决定的 , 所以它不保证set的迭代顺序;特别是它不保证该顺序恒久不变 。
【飞利浦·斯塔克|java容器类介绍】TreeSet:是二叉树实现的 , 基于TreeMap , 生成一个总是处于排序状态的set , 内部以TreeMap来实现 , 不允许放入null值 。 它是使用元素的自然顺序对元素进行排序 , 或者根据创建Set时提供的 Comparator 进行排序 , 具体取决于使用的构造方法 。
LinkedHashSet:集合同样是根据元素的hashCode值来决定元素的存储位置 , 但是它同时使用链表维护元素的次序 。 LinkedHashSet将会以元素的添加顺序访问集合的元素 。 LinkedHashSet在迭代访问Set中的全部元素时 , 性能比HashSet好 , 但是插入时性能稍微逊色于HashSet 。
EnumSet:中所有值都必须是指定枚举类型的值 , 它的元素也是有序的 , 以枚举值在枚举类的定义顺序来决定集合元素的顺序 。 EnumSet集合不允许加入null元素 , 否则会抛出NullPointerException异常 。
HashMap:以哈希表数据结构实现 , 查找对象时通过哈希函数计算其位置 , 它是为快速查询而设计的 , 其内部定义了一个hash表数组(Entry[


推荐阅读