Java的容器类小结
Java的容器类其实就是集合类,只是为了不与Collection接口混淆,国内基本翻译为容器类。

容器类分为两种:独立元素序列的Collection和键值对的Map.
Collection主要有如下几种:
- List:按插入顺序保存元素;
- ArrayList:擅长于随机访问元素,但是在List的中间插入和移除元素较慢;
- LinkedList:插入删除代价较低,特性集比ArrayList大,但随机访问相对比较慢;
- Set:不重复保存元素;
- HashSet:提供最快查找,使用了散列函数,顺序是杂乱的;
- TreeSet:按照比较结果的升序保存对象,保留了HashSet的查询速度;
- LinkedHashSet:按照被添加的顺序保存对象,使用了散列函数,同时保留了HashSet的查询速度;
- Queue:按排队规则顺序保存元素;
Map:一组成对的“键值对”对象,允许键来查找值,有如下几种:
- HashMap:提供最快的查找,没有明显顺序保存对象;
- TreeMap:按照比较结果的升序保存键,保留了HashMap的查询速度;
- LinkedHashMap:按照插入的顺序保存键,保留了HashMap的查询速度;
示例
package net.oseye; import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List; public class RunMain { public static void main(String[] args) {
int total=1000000; List<Integer> arrayList=new ArrayList<Integer>();
List<Integer> linkedList=new LinkedList<Integer>();
long start=System.currentTimeMillis();
for(int i=0;i<total;i++){
arrayList.add(i);
}
long end=System.currentTimeMillis();
System.out.println("ArrayList插入数据时间:"+(end-start)); start=System.currentTimeMillis();
for(int i=0;i<total;i++){
linkedList.add(i);
}
end=System.currentTimeMillis();
System.out.println("LinkedList插入数据时间:"+(end-start)); start=System.currentTimeMillis();
Iterator<Integer> itArrayList=arrayList.iterator();
while(itArrayList.hasNext()){
itArrayList.next();
}
end=System.currentTimeMillis();
System.out.println("ArrayList顺序访问时间:"+(end-start)); start=System.currentTimeMillis();
Iterator<Integer> itLinkedList=linkedList.iterator();
while(itLinkedList.hasNext()){
itLinkedList.next();
}
end=System.currentTimeMillis();
System.out.println("LinkedList顺序访问时间:"+(end-start)); start=System.currentTimeMillis();
for(int i=0;i<total;i++){
arrayList.get(i);
}
end=System.currentTimeMillis();
System.out.println("ArrayList随机访问时间:"+(end-start)); start=System.currentTimeMillis();
for(int i=0;i<total;i++){
linkedList.get(i);
}
end=System.currentTimeMillis();
System.out.println("LinkedList随机访问时间:"+(end-start));
}
}
输出
ArrayList插入数据时间:219
LinkedList插入数据时间:266
ArrayList顺序访问时间:15
LinkedList顺序访问时间:16
ArrayList随机访问时间:16
输出结果少了一条“随机访问时间”,因为实在太慢了,我等了20+分钟一直没出现结果,就先放弃了。
而插入时间ArraryList反而快,估计是因为都是在尾部添加所致,如果随机插入就可以看出结果了:
package net.oseye; import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List; public class RunMain { public static void main(String[] args) {
int total=100000; List<Integer> arrayList=new ArrayList<Integer>();
List<Integer> linkedList=new LinkedList<Integer>(); for(int i=0;i<1000;i++){
arrayList.add(i);
}
for(int i=0;i<1000;i++){
linkedList.add(i);
} long start=System.currentTimeMillis();
for(int i=0;i<total;i++){
arrayList.add(800,i);
}
long end=System.currentTimeMillis();
System.out.println("ArrayList插入数据时间:"+(end-start)); start=System.currentTimeMillis();
for(int i=0;i<total;i++){
linkedList.add(800,i);
}
end=System.currentTimeMillis();
System.out.println("LinkedList插入数据时间:"+(end-start));
}
}
输出
ArrayList插入数据时间:3391
LinkedList插入数据时间:203
PS:我这里一直存在一个疑问:我使用迭代器遍历,是否就是传说中的顺序访问呢?(待解决)
Java的容器类小结的更多相关文章
- Java的容器类Collection和Map
一,概念 JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. java的容器类一共有两种主要类型,Colllection和Map. 两者的区别是:Collection是单个元素,而Map是存 ...
- java并发包小结(二)
接上一篇 java并发包小结(一):http://blog.csdn.net/aalansehaiyang52/article/details/8877579 Future 接口Future 接口允许 ...
- java IO 流小结
java IO 流小结 java流类图结构 流的分类 按方向 输入流 输出流 按类型 字节流 字符流 结论:只要是处理纯文本数据,就优先考虑使用字符流. 除此之外都使用字节流.
- Java:容器类线程不安全
Java:容器类线程不安全 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 1. Collection 线程不安全的举例 前言 1.当我们执行下面语句的时候,底层 ...
- java Concurrent并发容器类 小结
Java1.5提供了多种并发容器类来改进同步容器的性能. 同步容器将所有对容器的访问都串行化,以实现他们的线程安全性.这种方法的代价是严重降低并发性,当多个线程竞争容器的锁时,吞吐量将严重减低. 一 ...
- java单向加密算法小结(2)--MD5哈希算法
上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...
- Java的容器类
程序总是根据运行时才知道的某些条件去创建新对象.需要在任意时刻和任意位置创建任意数量的对象. 如果你想保存一组基本数据类型数据,建议使用数组,但是数组有固定的尺寸. 一般情况下,你在写程序时并不知道将 ...
- Java调用存储过程小结
学生在学习jdbc的时候,会问到怎么调用存储过程,现在将java调用oracle存储过程的示例总结如下.(关于调用sqlserver的存储过程将在下次进行小结请关注) 一:无返回值的存储过程 存储过程 ...
- 性能测试工具LoadRunner13-LR之Virtual User Generator 创建java脚本以及小结
Java vuser是自定义的java虚拟脚本,脚本中可以使用标准的java语言. 环境配置 1.安装jdk(注意:lr11最高支持1.6) 2.配置环境变量 3.在lr选择java Vuser协议 ...
随机推荐
- Effective java -- 2 对于所有对象都通用到方法
第八条:覆盖equals时请遵守通用约定 什么时候需要覆盖equals方法?类具有自己的逻辑相等概念,并且父类的equals方法不能满足需要.重写equals时需要遵循一下约定: 自反性:非null ...
- jQuery 鼠标滚轮插件 jquery.mousewheel.js
jQuery Mousewheel Plugin,用于添加跨浏览器的鼠标滚轮支持.mousewheel事件的处理函数有一点小小的变化,它除了第一个参数event 外,还接收到第二个参数delta.通过 ...
- 建立、配置和使用Activity——启动其他Activity并返回结果
Activity还提供了一个startActivityForResult(Intent intent,int requestCode)方法来启动其他Activity.该方法用于启动指定Activity ...
- EXP/IMP 命令参数
http://www.cnblogs.com/sopost/archive/2010/01/19/2190125.html 1.EXP: 1.完全: EXP ...
- Pomelo的Router
在pomelo中,对服务器的扩充非常简单,只需要修改一下配置文件config/servers.json,多添几台服务器配置就行了,如果我们的connector和chat都具有多台服务器,因此需要考虑对 ...
- MyBatis 一对一关联查询
xml文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC & ...
- Ubuntu14.04 安装Oracle JDK
在Ubuntu 14.04 中安装 Oracle JDK6,7 或 8. 准备:添加add-apt-repository工具 #apt-get install python-software-prop ...
- 维护网站时碰到的Office组件导入、导出出现的问题
问题一:检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005 解决方法: 1.运行dco ...
- [CSS3]学习笔记-文字与字体相关样式
1.给文字添加阴影 <!doctype html> <html> <head> <meta charset="utf-8"> < ...
- uml系列图(一)——与uml的第一次约会
uml视频终于开始看了,再看之前先大概了解了一下uml都有啥. 老规矩,有图有真相: 暂时的理解就这么多,等到uml看完的时候总结跟现在这张图比一下,应该是有很大的区别吧. uml是一种可视化的建模语 ...