Java容器的特点与接口中的方法

来源:互联网 发布:淘宝主图 500k 编辑:程序博客网 时间:2024/06/13 22:19

Java集合框架图

这里写图片描述

Java容器类类库的用途是“保存对象”,并将其划分为两个不同的概念:

  1. Collection:一个独立元素的序列,这些元素都服从一条或多条规则。

    1. List:是有序可以重复的集合,可以在任意位置增加删除元素,可以用Iterator和ListIterator实现遍历。

      • ArrayList:本质是一个长度可增长的数组,常用于随机访问元素,但是在List的中间插入和移除元素时较慢。
      • LinkedList:内部实现为一个双向链表,可以以较低的代价在List中间进行插入和删除操作,提供了优化的顺序访问。在随机访问方面相对较慢,但是它的特性集交ArrayList更大。
      • Vector:与ArrayList相似,不过Vector是线程安全的,方法为synchronized的,所以速度较慢,已被ArrayList替代。
      • CopyOnWriteArrayList:用于多线程机制,与ArrayList相似,当多个迭代器遍历和修改这个列表时,不会抛出ConcurrentModificationException,而ArrayList会抛出。因为在CopyOnWriteArrayList中,写入将导致创建整个底层数组的副本,而原数组将保留在原地,使得复制的数组在被修改时,读操作可以安全的执行。当修改完成时,一个原子性操作讲把新的数组换入,使新的读取操作可以看到这个修改。
    2. Set:不包含重复元素的集合,set中最多一个null元素,只能用Iterator实现遍历。

      • HashSet:线程不安全,存取速度快,依赖元素的hashCode方法和equals方法保证元素唯一性。
      • TreeSet:线程不安全,可以对Set集合进行排序,通过compareTo或者compare方法来保证元素的唯一性。以二叉树的形式存放的。
    3. Queue:遵循先进先出的原则。使用时尽量避免使用add()和remove()方法,而是使用offer()来添加元素,使用poll()来移除元素,他的优点时可以通过返回值来判断是否成功。LinkedList实现了Queue接口。Queue通常不允许插入null元素。 
      • PriorityQueue:优先级队列声明下一个弹出的元素时最需要的(具有最高优先级的),优先级队列会在插入时排序(维护一个堆)但是他们可能在移除时选则最重要的元素。
      • BlockingQueue:阻塞队列,有ArrayBlockingQueue和LinkedBlockingQueue。
    4. Stack: 
      -遵循先进后出的原则。继承Vector。 
      • 通过五个操作对Vector进行扩展,允许将向量视为堆栈,提供push和pop操作,以及取堆顶点的peek()方法,测试堆栈是否为空的empty()方法。
  2. Map:一组成对的 键值对 对象,可以使用键来查找值,ArrayList可以使用数字来查找值,因此在某种意义上,它将数字与对象关联在一起。映射表允许使用另一个对象来查找某个对象,也被称为“关联数组”,因为它将某些对象与另外一些对象关联在一起,或者被称为“词典”,因为可以使用键对象来查找值对象。 
    1. HashMap:线程不安全,提供了最快的查找技术,没有任何明显的顺序来保存数据。 
      • LinkedHashMap:可以保证HashMap集合有序,存入的顺序和取出的顺序一致。
    2. TreeMap:可以用来Map集合中的键进行排序。
    3. HashTable:线程安全,方法由关键字synchronized修饰,速度慢,底层是哈希表数据结构。是同步的,不允许null作为键或者值。

接口中的方法

1. Collection 

这里写图片描述

2. List

List接口继承了Collection接口,图中标志为红色的方法为新增方法。新增的方法也体现出了List可以按下标随机访问的的特征。

这里写图片描述

3. Set

Set接口继承了Collection接口的部分方法。

这里写图片描述

4. Queue

Queue接口继承Collection接口,保留了add()方法和remove()方法,目前我们一般用offer()、poll()和peek()来添加、删除以及获取队首元素,而不用add()、remove()、element()。原因是:当队列的容量达到最大值时,在调用add()方法会抛出异常;当队列为空时,调用remove()和element()方法会抛出异常,而poll()和peek()返回null。

这里写图片描述

5. Iterator

Iterator遍历集合,在Collection接口里有一个iterator()方法返回一个Iterator对象,这个对象就用于所有Collection集合容器的Iterator遍历。

这里写图片描述

6. ListIterator

ListIterator主要用于List集合的双向遍历。它可以实现List集合的向前向后遍历。

这里写图片描述

7. Map

Map是以键值对的形式保存数据。 

这里写图片描述


0 0