J2SE(十七)Java之集合框架

集合简介     

java中数组是很常用的一种的数据结构,我们用它可以满足很多的功能,但是,有时我们会遇到如下这样的问题:
(1)我们需要该容器的长度是不确定的。
(2)我们需要它能自动排序。
(3)我们需要存储以键值对方式存在的数据。
       如果遇到上述的情况,数组是很难满足需求的,因此java给我们提供了另一种与数组类似的数据结构——集合类,集合类也称容器类,常用来保存临时数据,管理对象等,集合在Java语言中也是非常重要的一类知识,今天我们来探讨一下集合类的使用。先来看看集合类UML图:


一、Collection

public interface Collection<E> extends Iterable<E> {
       Collection是最基本的集合接口,定义了集合常用操作抽象方法(如add、remove等),list与set接口实现了Collection接口,从Collection接口的定义可以看出,它实现了Iterable接口,因此Collection可以采用iterator迭代来进行遍历。
for (Iterator iterator = c.iterator(); iterator.hasNext();) {
			Object object = (Object) iterator.next();
		}

二、List

List实现了Collection接口,其存储的元素是有序的,存储的元素可以重复,List可以包含null,即使使用了泛型。

List常用集合包括:

(1)ArrayList

          基于数组存储,读取速度快,插入与删除速度慢(因为插入与删除时要移动后面的元素),适合于随机访问。

(2)vector

          基于数组存储,功能与ArrayList几乎相同,设置都是基于线程同步的。

  public synchronized boolean add(E e) {
        modCount++;
        ensureCapacityHelper(elementCount + 1);
        elementData[elementCount++] = e;
        return true;
    }
方法都加上了synchronized前缀。

(3)LinkedList

        基于链表存储,删除与插入速度快,读取速度较慢,因为它读取时是从头向尾(如果节点在链的前半部分),或尾向头(如果节点在链的后半部分)查找元素。因此适合于元素的插入与删除操作。

        此外LinkedList提供额外的get,remove,insert方法在 LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队(deque)。

        LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种是在方法中实现同步,另外一种解决方法是在创建List时构造一个同步的List:

List list=Collections.synchronizedList(new ArrayList());

三、Set

Set也实现了Collection接口,其存储的元素是无序的,存储的元素不可以重复。

Set大致分为2类:

(1)不排序Set:
(a)HashSet 可以包含null,查询速度最快
(b)LinkedHashSet
     可以包含null,继承了HashSet,保持元素的插入次序,因为内部使用LinkedHashMap实现,所以能保持元素插入次序。
(2)不排序Set
(a)TreeSet,内部以 TreeMap来实现

四、Map

Map中存储的是“键值对”

Map分为2种:

(1)排序Map

TreeMap,非线程安全

(2)不排序Map

(a)HashMap, 采取Hash表的方式进行存储,HashMap不是线程安全的,可以存储null的,无论是对Key还是对Value

(b)Hashtable,采取Hash表的方式进行存储,Hashtable是线程安全的,Hashtable是不可以存储null的

(c)LinkedHashMap


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值