java中的Collection

本文详细介绍了Java集合框架的各种实现,包括List和Set的不同类型及特点。对比了Vector、ArrayList和LinkedList在性能和线程安全性方面的差异,并解释了HashSet、LinkedHashSet和TreeSet的工作原理。

原文来自BlogJava,原文地址:http://www.blogjava.net/xdsamuel/archive/2007/05/10/116519.html

在使用java的时候,我们都会遇到使用集合(collection)的时候,但是java api提供了多种集合的实现。

总的说来,java api中所用的集合类,都是实现了collection接口,他的一个类继承结构如下:

                  collection<--list<--vector
                          collection<--list<--arraylist
                          collection<--list<--linkedlist
                          collection<--set<--hashset
                          collection<--set<--hashset<--linkedhashset
                          collection<--set<--sortedset<--treeset

vector : 基于array的list,其实就是封装了array所不具备的一些功能方便我们使用,它不可能走入array的限制。性能也就不可能超越array。所以,在可能的情况下,我们要多运用array。另外很重要的一点就是vector&ldquo;sychronized&rdquo;的,这个也是vector和arraylist的唯一的区别。

arraylist:同vector一样是一个基于array上的链表,但是不同的是arraylist不是同步的。所以在性能上要比vector优越一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。

linkedlist:linkedlist不同于前面两种list,它不是基于array的,所以不受array性能的限制。它每一个节点(node)都包含两方面的内容:1.节点本身的数据(data);2.下一个节点的信息(nextnode)。所以当对linkedlist做添加,删除动作的时候就不用像基于array的list一样,必须进行大量的数据移动。只要更改nextnode的相关信息就可以实现了。这就是linkedlist的优势。

list总结:

1. 所有的list中只能容纳单个不同类型的对象组成的表,而不是key-value键值对。例如:[ tom,1,c ];

2. 所有的list中可以有相同的元素,例如vector中可以有 [ tom,koo,too,koo ];

3. 所有的list中可以有null元素,例如[ tom,null,1 ];

4. 基于array的list(vector,arraylist)适合查询,而linkedlist(链表)适合添加,删除操作。

hashset:虽然set同list都实现了collection接口,但是他们的实现方式却大不一样。list基本上都是以array为基础。但是set则是在hashmap的基础上来实现的,这个就是set和list的根本区别。hashset的存储方式是把hashmap中的key作为set的对应存储项。看看hashset的add(object  obj)方法的实现就可以一目了然了。

    public boolean add(object obj)
    {
        return map.put(obj, present) == null;
    }

这个也是为什么在set中不能像在list中一样有重复的项的根本原因,因为hashmap的key是不能有重复的。

linkedhashset:hashset的一个子类,一个链表。

treeset:sortedset的子类,它不同于hashset的根本就是treeset是有序的。它是通过sortedmap来实现的。

set总结:

1. set实现的基础是map(hashmap);

2.  set中的元素是不能重复的,如果使用add(object obj)方法添加已经存在的对象,则会覆盖前面的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值