java 集合框架

来源:互联网 发布:如何开网店淘宝店货源 编辑:程序博客网 时间:2024/05/19 16:32

java集合框架:

顶层接口Collection和Map接口,Java SDK不提供直接继承自Collection的类,提供的类都是继承自Collection的“子接口”如List和Set。不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:
    Iterator it = collection.iterator(); // 获得一个迭代子
    while(it.hasNext()) {
      Object obj = it.next(); // 得到下一个元素
    }

迭代器是 故障快速修复(fail-fast)的。这意味着,当另一个线程修改底层集合的时候,如果您正在用 Iterator 遍历集合,那么,Iterator就会抛出ConcurrentModificationException (另一种 RuntimeException异常)异常并立刻失败

集合接口实现关系

java主要使用的实现类,下面以这几种实现描述

图1.

1.继承了Collection的list子类接口的集合类型

List 接口继承了 Collection 接口以定义一个允许重复项的有序集合

1.1.LinkedList

List linkedList =new LinkedList();

底层使用链表存储,适用于频繁的从列表的中间位置添加和除去元素,重写了collection的iterator方法,支持插入双向遍历List,ListIterator listIterator() : 返回一个列表迭代器,可用来访问列表中的元素。

1.2.ArrayList

List arrayList=new ArrayList();

底层实现:动态数组,支持随机访问,而不必在除尾部的任何位置插入或除去元素,ArrayList类封装了一个动态再分配的Object[]数组。每个ArrayList对象有一个capacity。
这个capacity表示存储列表中元素的数组的容量。当元素添加到ArrayList时,它的capacity在常量时间内自动增加。

1.3.Vector-stack

继承了Collection的set子类的集合类型

Set接口是collection接口的一个子接口,不包含重复的元素,即Set中不存两个这样的元素e1和e2,使得e1.equals(e2)为true,object的equals方法比较地址(String重写的equals方法比较字符串内容)。Set 接口继承 Collection 接口,而且它不允许集合中存在重复项。所有原始方法都是现成的,没有引入新方法。具体的Set 实现类依赖添加的对象的 equals()方法来检查等同性。

1.hashset--LinkedHashSet

以哈希表形式存放,插入删除快

2.sortedSet---Treeset-树形存储

treeset实现了sortedSet接口,可对元素按指定比较器排序,重写比较器内部类

使用示例:

图2.TreeSet指定比较器排序


继承了Map接口的集合(提供了映射关系)

1.hashmap

顺序遍历键,元素无序,适合在Map 中插入、删除和定位元素,hashmap非同步的:多个线程可以同时操作,性能较高,如果要设置成同步可使用Map m = Collections.synchronizedMap(hashMap),允许空值做key-value,如果对hashmap进行排序

可以借助treeMap的排序器实现,如图。


图3.hashmap借助treemap排序

可以借助list和map.entityset排序

图4.借助list比较器排序

2.hashtable-LinkedHashMap

扩展HashMap,以插入顺序将关键字/值对添加进链接哈希映像中,hashtable同步的:一个时间点只能有一个线程可以修改哈希表的

3.sortedMap-treemap,适合对元素进行排序


按key排序:

图5.按key排序


按value排序:


图6.按value排序



原创粉丝点击