Java基础——容器

简介

项目需要封装一些东西,在这个封装的过程中,你肯定需要容器的帮助。所以就把容器这个整理了一下。

容器分为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的操作快…… 最后选择用哪个,还是和你的需求有关系的: 没有最好的容器,只有最适合你的容器,不然人家也不会提供出这么多的实现。 如果你对内部实现有顺序,可以关联上源码,自己看人家的实现。莫找借口失败,只找理由成功。

Java基础——容器

相关文章:

你感兴趣的文章:

标签云: