java容器的理解

Set无序,元素唯一 常用实现类有HashSet,TreeSet
List有序的,可以重复 常用实现类有ArrayList,LinkedList
Map是以键值出现的 常用实现类有HashMap,TreeMap
一.基本概念
 
Java容器类库的用途是保存对象,根据数据结构不同将其划分为两个不同的概念
 
1、  Map,一组键值对(key-value)对象的序列,可以使用key来查找value,其中key是不可以重复的,value可以重复。我们可以称其为字典或者关联数组。其中HashMap是无序的,TreeMap是有序的,Hashtable是线程安全的。
 
?         int size() : 返回此集合中元素的个数
 
?         boolean isEmpty() : 测试此集合是否为空
 
?         boolean contains(Object element) : 测试此集合中是否有该元素
 
?         Iterator<E> iterator() : 返回此集合中的各个元素进行迭代的迭代器
 
?           boolean containsAll(Collection<?> c) : 判定此集合是否包含给定的一组元素,包含返回true,否则false
 
?           boolean addAll(Collection<? extends E> c) : 将指定集合中的所有元素都添加到当前集合中
 
?           void clear() : 移除此集合中的所有元素
 
?           boolean removeAll(Collection<?> c) : 移除此集合中那些也包含在指定集合中的元素(求集合的差集)
 
?           boolean retainAll(Collection<?> c) : 仅保存此集合中那些也包含在指定集合中的元素(求集合的交集)
 
d)        将集合转换成Object类型的对象数组
 
 
1.     List接口及实在现类
 
 
 
List可以将元素维护在特定的序列中,并且答应一个相同元素在集合中多次出现。List接口在Collection接口的基础上增加了大量的方法,使得可以在List中间插进和移除元素。除了Abstract类之外,在学习中比较常用的类有ArrayList(基于数组实现)LinkedList(基于循环链表实现)Vector(基于数组实现,线程安全)
 
List接口中提供的面向位置操纵的各种方法:(集合中已有的方法略往)
 
?           void add(int index, E element) : 在列表的指定位置插进指定元素。
 
?           boolean addAll(int index, Collection<? extends E> c) : 将指定集合中的所有元素插进到集合中的指定位置。
 
?           E get(int index) : 返回集合中指定位置的元素。
 
?           int indexOf(Object o) : 返回指定对象在集合中第一次出现的索引,从0位置开始,返回-1为不存在该元素。
 
?           int lastIndexOf(Object O) : 返回指定对象在集合中最后一次出现的索引位置,返回-1为不存在。
 
?           ListIterator<E> listIterator() : 以正确的顺序返回集合中元素的列表迭代器。
 
?           ListIterator<E> listIterator(int index) : 以正确的顺序返回集合中元素的列表迭代器,从集合中指定的位置开始。
 
?           E remove(int index) : 移除集合中指定位置的元素。
 
?           E set(int index, E element) : 用指定元素替换集合中指定位置的元素。
 
?           List<E> subList(int fromIndex, int toIndex) : 返回集合中指定的fromIndex(包括)和toIndex(不包括)之间的部分视图。
 
List在数据结构中分别表现为数组、向量、链表、堆栈、队列等形式。
 
?  ArrayList的特点、实现机制及使用方法
 
a)      ArrayList特点:
 
ArrayList顾名思义,它是用数组实现的一种线性表。常规数组不具备自动递增的功能,但是ArrayList在使用时我们不必考虑这个题目。可以直接按位置进行索引,查找和修改速度较快,缺点是插进或者删除速度较慢。在执行插进删除时调用的是System.arraycopy方法,是一个native方法。
 
b)      ArrayList的实现机制:
 
在JDK源码中可以看到ArrayList总共只有两个属性,一个是Object数组类型的elementData,一个是int型的size。
 
在构造方法中也可以看到,无参构造方法调用的是this(10),调用的带一个参数的构造方法,默认无参构造方法分配一个size为10的数组。按照Collection接口中定义的构造方法,它必须有一个通过其它集合对象构造自身对象的方法。这是一个相对比较简单的线性表。并且JDK中提供了大量的比较好用的方法可以使用。该动态数组在存储空间不足时按照下面方法重新分配空间:
 
a)      Vector的特点:
 
ArrayList实现的是一种动态数组,LinkedList是一种双向循环链表,Vector并未在前两者的基础上做实现,而是直接实现了List接口。Vector中的所有方法前面都有一个synchronized关键字做修饰。Vector是有序可重复的。

  Set(集合):

  Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。

  Set接口主要实现了两个实现类:

  HashSet : HashSet类按照哈希算法来存取集合中的对象,存取速度比较快

  TreeSet : TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。

Map : 维护“键值对”的关联性,使你可以通过“键”查找“值”

  HashMap : Map基于散列表的实现。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量capacity和负载因子load factor,以调整容器的性能。

  LinkedHashMap : 类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序。

  TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。

posted @ 2012-12-09 11:36  小伙、不一般  阅读(1316)  评论(0编辑  收藏  举报