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协议 ...
随机推荐
- Angular - - $location 和 $window
$location $location服务解析浏览器地址中的url(基于window.location)并且使url在应用程序中可用.将地址栏中的网址的变化反映到$location服务和$locati ...
- CentOS-6.6下Tomcat-7.0安装与配置(Linux)
CentOS-6.6下Tomcat-7.0安装与配置(Linux) 一.认识tomcat Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目, ...
- shell读取文件的每一行
写法一: ---------------------------------------------------------------------------- #!/bin/bash while ...
- js原生设计模式——2面向对象编程之继承—多继承
1.单对象克隆 <!DOCTYPE html><html lang="en"><head> <meta charset=" ...
- WPF ResourceDictionary的使用
作用:一个应用程序中,某个窗口需要使用样式,但是样式非常多,写在一个窗口中代码分类不方便.最好Style写在专门的xaml文件中,然后引用到窗口中,就像HTML引用外部css文件一样. 初衷:就在于可 ...
- ASP.NET - 自定义控件处理页面事件(控件与页面数据交互)的方法
//用委托的方法实现 //控件代码 public delegate void DelegateFunction( string sPageTitle ); private DelegateFuncti ...
- FMS用AS来实现拉流
application.onAppStart=function (){ this.myNC=new NetConnection(); this.myNC.onStatus=NC_onStatus; t ...
- 获取FMS的状态信息
application.getStats() application.getStats() Returns statistics about an application. Returns An Ob ...
- SQL Server如何固定执行计划
SQL Server 其实从SQL Server 2005开始,也提供了类似ORACLE中固定执行计划的功能,只是好像很少人使用这个功能.当然在SQL Server中不叫"固定执行计划&qu ...
- JS可维护性代码
最近在看一本Js的书名叫“Javascript高级程序设计”在里面学到了很多东西,是一本不错的书,非常值得一看. 解耦css/javascript element.style.color=" ...