java集合类总结
来源:互联网 发布:15年广东省的经济数据 编辑:程序博客网 时间:2024/05/01 09:14
先说Array:由于Array(数组)通常意义上讲只是一个单纯的线性序列,又基于Native,凭此它的效率历来便号称Java中最高。所以通常我们也都承认Java中效率最高的存储方式就是使用数组。但是,由于数组初始化后大小固定,索引不能超出下标,缺少灵活的扩展功能等原因,使得很多人放弃了数组的使用, 转而使用Collection,List,Map,Set等接口处理集合操作。
诚然在Java中使用集合类可以极大的简化我们的代码编写量。但是,有时明明只是缓存一些线性数据,还偏偏有人要使用HashMap保存,系统为此付出了不必要的内存损耗。如果是通常的程序还没有什么,当应用在高并发或者加载高内存消耗对象时(如Image图像)无意义的频繁使用集合类将极易引发OutOfMemoryException。
以List接口实现的集合类中,ArrayList内部运算是基于Array的,所以他继承了Array的优势,非常适合索引取值和存储线性数据(Vector虽然也是基于Array的,但毁在大量的synchronized上……所以很多情况下等于废了……)。但它不适合插入数据和删除数据,因为每插入或删除一次就会产生一次大量数组内容Copy的操作。而LinkedList正好与ArrayList相反,它比较适合与插入删除操作,不适合于索引取值,因为它不可以像数组一样根据索引值直接就可以定位元素的地址,而需要从头至尾一个一个的来数位置。
Java API中所用的集合类,都是实现了Collection接口,他的一个类继承结构如下:
Vector : 基于Array的List,其实就是封装了Array所不具备的一些功能方便我们使用,它不可能走入Array的限制。性能也就不可能超越Array。所以,在可能的情况下,我们要多运用Array。另外很重要的一点就是Vector“synchronized”(具备线程同步)的,这个也是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(链表)适合添加,删除操作。
Set总结
理解集合类
- java集合类总结
- java集合类总结
- JAVA集合类总结
- java集合类总结
- java集合类总结
- java集合类总结
- JAVA集合类总结
- java集合类总结
- JAVA集合类总结
- java集合类总结
- java集合类总结
- java集合类总结
- java集合类总结
- java集合类总结
- JAVA集合类总结
- java集合类总结
- Java集合类总结
- java集合类总结
- [LeetCode] Plus One
- CF 9A. Die Roll
- Java数组与内存控制
- GStreamer播放教程02——字幕管理
- seam中的<s:validateEquality>标签
- java集合类总结
- 利用Java编写简单的WebService实例
- java文件复制
- RTB, DSP, AdExchange知识点汇总
- Java可以做什么及可以给我们带来什么?
- 日志测试Checklist
- Intel 平台编程总结----缓存优化之数据预取
- 数据记录的操作(insert,select,update,delete)函数和分组查询(group by),表连接(join on),嵌套查询(in)
- 继承定义及应用举例