Chinaunix首页 | 论坛 | 博客
  • 博客访问: 187730
  • 博文数量: 89
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 828
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-08 10:44
文章分类
文章存档

2014年(9)

2013年(80)

我的朋友

分类: Java

2013-11-30 19:40:52

简介
        项目需要封装一些东西,在这个封装的过程中,你肯定需要容器的帮助。所以就把容器这个整理了一下。
        容器分为Collection和Map,具体都有什么,看下面的图或者看JDK的API文档就好,图中只列了一些相对来说常用的。
                                        
        现在对上面图中列出的东西进行一个简单的说明:
Collection
        Collection定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式。
Set
        Set中的数据对象没有顺序且不可以重复。那么它的常用实现又都具有什么特征呢?
        HashSet:在底层实现上依赖HashMap,主要依赖了HashMap的Key是不能够重复的来实现不可以重复。
        TreeSet:使得存进来的元素是顺序存储的,但元素必须实现Comparator接口。访问和遍历时间很快,操作慢。
        LinkedHashSet:对象以顺序存储,先进先出,操作快。
List
        List中的数据对象有顺序且可以重复。那么它的常用实现类又都是什么样的呢?
        ArrayList:使用一个Object对象数组存储元素,并且具有自变长机制,允许对元素进行快速随机访问。缺点就是每个元素之间不能有间隔,当数组大小不满足需要增加存储能力时,就要将已有的数据复制到新的存储空间。简单一句话,就是访问快,操作慢。
        LinkedList:具有链表的优点及缺点:操作快,不支持高效的随机访问。在空间消耗上,不像ArrayList还需要预留一定量的空间。
        Vector:也是通过数组实现的,但它支持线程的同步。
        Stack:继承自Vector,自己的方法不多,基本跟栈的特点一样。
Map
        Map这个容器的用法特别多,个人感觉有时候听到的先存到内存中,就是用Map之类的容器进行存储。
        Map的实现和Set、List差不多,也是Hash、Tree、Linked开头的:
        HashMap:访问速度很快,查找速度与内容无关,为常量。允话值为空,允许只有一个key为空。
        LinkedHashMap:HashMap的子类,但是有了顺序,先入先出。
        ConcurrentHashMap:HashMap的线程安全版
        TreeMap:看名字可以猜出这个是一个有顺序的Map,它和Linked的区别就是Tree和Link的区别。
        ConcurrentSkipListMap:TreeMap的线程安全版
        HashTable:和HashMap的区别在于,不允许值为空,不允许key为空,并且是线程同步的。
总结
        List肯定有序,其它的凡是带Linked、Tree的都有序,带Hash的随机访问时间是一个常量,带Link的操作快……
        最后选择用哪个,还是和你的需求有关系的:
        没有最好的容器,只有最适合你的容器,不然人家也不会提供出这么多的实现。
        如果你对内部实现有顺序,可以关联上源码,自己看人家的实现。
阅读(450) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~