JAVA核心技术I---JAVA基础知识(列表List)
一:List了解
(一)List:列表
–有序的Collection
–允许重复元素
–{,,,{,},,}
(二)List:主要实现
同步/非同步:针对线程而言
–ArrayList(非同步的)
–LinkedList(非同步)
–Vector(同步)

二:ArrayList:数组实现
(一)ArrayList了解
–以数组实现的列表,不支持同步
List list = Collections.synchronizedList(new ArrayList(...));
–利用索引位置可以快速定位访问–不适合指定位置的插入、删除操作
–适合变动不大,主要用于查询的数据
–和Java数组相比,其容量是可动态调整的
–ArrayList在元素填满容器时会自动扩充容器大小的50%
(二)ArrayList实现
ArrayList<Integer> al = new ArrayList<Integer>(); //<>是泛型编程,类似于C++模板
al.add();
al.add();
al.add();
al.add();
al.add();
al.add(new Integer()); System.out.println("the third elem:"+al.get()); //从0开始索引
al.remove(); //删除第四个元素
al.add(, ); //插入第四个元素为10
//进行遍历
trverseByIterator(al);
trverseByIndex(al);
trverseByFor(al);
public static void trverseByIterator(ArrayList<Integer> al) {
//使用迭代器遍历
System.out.println("==========迭代器遍历===========");
long startTime = System.nanoTime(); //获取开始时间,以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。
Iterator<Integer> iter = al.iterator(); //获取迭代指针
while(iter.hasNext()) {
System.out.print(iter.next()); //指针会下移,但是会先返回当前指针指向的数据值
}
long endTime = System.nanoTime();
long duration = endTime-startTime;
System.out.println("iterator使用纳秒:"+duration);
}
public static void trverseByIndex(ArrayList<Integer> al) {
//使用迭代器遍历
System.out.println("==========index索引遍历===========");
long startTime = System.nanoTime(); //获取开始时间,以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。
for(int i=;i<al.size();i++) {
System.out.print(al.get(i));
}
long endTime = System.nanoTime(); //获取开始时间,以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。
long duration = endTime-startTime;
System.out.println("index使用纳秒:"+duration);
}
public static void trverseByFor(ArrayList<Integer> al) {
//使用迭代器遍历
System.out.println("==========for索引遍历===========");
long startTime = System.nanoTime(); //获取开始时间,以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。
for(Integer item : al) {
System.out.print(item);
}
long endTime = System.nanoTime(); //获取开始时间,以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。
long duration = endTime-startTime;
System.out.println("for使用纳秒:"+duration);
}
==========迭代器遍历===========
3121066iterator使用纳秒:
==========index索引遍历===========
3121066index使用纳秒:
==========for索引遍历===========
3121066for使用纳秒:
输出

(三)性能测试:索引效率高
for(int i=;i<;i++) {
al.add(i);
}
==========迭代器遍历===========
iterator使用纳秒:
==========index索引遍历===========
index使用纳秒:
==========for索引遍历===========
for使用纳秒:
三:LinkedList:链表实现
(一)LinkedList了解
–以双向链表实现的列表,不支持同步
List list = Collections.synchronizedList(new LinkedList(...));
–可被当作堆栈、队列和双端队列进行操作
–顺序访问高效,随机访问较差,中间插入和删除高效
–适用于经常变化的数
(二)LinkedList实现
public class LinkedListTest {
public static void main(String[] args) {
LinkedList<Integer> ll = new LinkedList<Integer>(); //<>是泛型编程,类似于C++模板
/*for(int i=0;i<10000;i++) {
ll.add(i);
}
*/
ll.add();
ll.add();
ll.add();
ll.add();
ll.add();
ll.add(new Integer());
System.out.println("the third elem:"+ll.get()); //从0开始索引
ll.remove(); //删除第四个元素
ll.add(, ); //插入第四个元素为10
//进行遍历
trverseByIterator(ll);
trverseByIndex(ll);
trverseByFor(ll);
}
public static void trverseByIterator(LinkedList<Integer> ll) {
//使用迭代器遍历
System.out.println("==========迭代器遍历===========");
long startTime = System.nanoTime(); //获取开始时间,以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。
Iterator<Integer> iter = ll.iterator(); //获取迭代指针
while(iter.hasNext()) {
System.out.print(iter.next());
}
long endTime = System.nanoTime();
long duration = endTime-startTime;
System.out.println("iterator使用纳秒:"+duration);
}
public static void trverseByIndex(LinkedList<Integer> ll) {
//使用迭代器遍历
System.out.println("==========index索引遍历===========");
long startTime = System.nanoTime(); //获取开始时间,以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。
for(int i=;i<ll.size();i++) {
System.out.print(ll.get(i));
}
long endTime = System.nanoTime(); //获取开始时间,以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。
long duration = endTime-startTime;
System.out.println("index使用纳秒:"+duration);
}
public static void trverseByFor(LinkedList<Integer> ll) {
//使用迭代器遍历
System.out.println("==========for索引遍历===========");
long startTime = System.nanoTime(); //获取开始时间,以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。
for(Integer item : ll) {
System.out.print(item);
}
long endTime = System.nanoTime(); //获取开始时间,以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。
long duration = endTime-startTime;
System.out.println("for使用纳秒:"+duration);
}
}
==========迭代器遍历===========
3121066iterator使用纳秒:
==========index索引遍历===========
3121066index使用纳秒:
==========for索引遍历===========
3121066for使用纳秒:
输出
(三)性能测试:for遍历效率高
==========迭代器遍历===========
iterator使用纳秒:
==========index索引遍历===========
index使用纳秒:
==========for索引遍历===========
for使用纳秒:
四:vector向量(同步)
(一)vector了解
–和ArrayList类似,可变数组实现的列表
–Vector同步,适合在多线程下使用
–原先不属于JCF框架,属于Java最早的数据结构,性能较差
–从JDK1.2开始,Vector被重写,并纳入到JCF
–官方文档建议在非同步情况下,优先采用ArrayList
(二)vector实现
import java.util.Vector;
import java.util.Iterator; public class vectorTest {
public static void main(String[] args) {
Vector<Integer> v = new Vector<Integer>(); //<>是泛型编程,类似于C++模板 for(int i=;i<;i++) {
v.add(i);
} //进行遍历
trverseByIterator(v);
trverseByIndex(v);
trverseByFor(v);
} public static void trverseByIterator(Vector<Integer> v) {
//使用迭代器遍历
System.out.println("==========迭代器遍历===========");
long startTime = System.nanoTime(); //获取开始时间,以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。
Iterator<Integer> iter = v.iterator(); //获取迭代指针
while(iter.hasNext()) {
iter.next();
}
long endTime = System.nanoTime();
long duration = endTime-startTime;
System.out.println("iterator使用纳秒:"+duration);
} public static void trverseByIndex(Vector<Integer> v) {
//使用迭代器遍历
System.out.println("==========index索引遍历===========");
long startTime = System.nanoTime(); //获取开始时间,以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。
for(int i=;i<v.size();i++) {
v.get(i);
}
long endTime = System.nanoTime(); //获取开始时间,以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。
long duration = endTime-startTime;
System.out.println("index使用纳秒:"+duration);
} public static void trverseByFor(Vector<Integer> v) {
//使用迭代器遍历
System.out.println("==========for索引遍历===========");
long startTime = System.nanoTime(); //获取开始时间,以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。
for(Integer item : v) {
;
}
long endTime = System.nanoTime(); //获取开始时间,以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。
long duration = endTime-startTime;
System.out.println("for使用纳秒:"+duration);
}
}
(三)性能测试:for效率好
五:总结
(一)ArrayList/LinkedList/Vector
(二)同步采用Vector
(三)非同步情况下,根据数据操作特点选取ArrayList/LinkedList
(四)ArrayList与LinkedList插入,查找性能比较
ArrayList查找效率高,LinkedList查找效率低。(修改同查找)
ArrayList删除效率低,需要移动大量数据,LinkedList删除效率高,不需要移动数据。<视情况而论,毕竟LinkedList会先进行查找操作>
JAVA核心技术I---JAVA基础知识(列表List)的更多相关文章
- 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承
<Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...
- Java核心技术 卷1 基础知识-第一天
基本数据类型 java是一种强数据类的的语言 共有8种基本数据类型 其中: 整型4种 int(4字节) short(2字节) long(8字节) byte(1字节) java中整型的范围与机器无关 长 ...
- 1.进入debug模式(基础知识列表)
1.进入debug模式(基础知识列表)1.设置断点 2.启动servers端的debug模式 3.运行程序,在后台遇到断点时,进入debug调试状态 ========================= ...
- [Java面试三]JavaWeb基础知识总结.
1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...
- Java学习之旅基础知识篇:数据类型及流程控制
经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...
- Java中浮点数的基础知识
偶然查看Math.round的JDK public static int round(float a) { if (a != 0x1.fffffep-2f) // greatest float val ...
- Java学习之旅基础知识篇:面向对象之封装、继承及多态
Java是一种面向对象设计的高级语言,支持继承.封装和多态三大基本特征,首先我们从面向对象两大概念:类和对象(也称为实例)谈起.来看看最基本的类定义语法: /*命名规则: *类名(首字母大写,多个单词 ...
- java 程序运行的基础知识【Java bytecode】
聊聊文字,写一篇关于 java 基础知识的博文. JVM 线程栈 到 函数运行 每一个JVM线程来说启动的时候都会创建一个私有的线程栈.一个jvm线程栈用来存储栈帧,jvm线程栈和C语言中的栈很类似, ...
- Java Script 学习笔记 -- 基础知识
Java script 概述 java Script 的简介 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为 ...
- Java学习1——计算机基础知识
本文包含了一些计算机基础知识:计算机组成:Windows常用快捷键:DOS常用命令:计算机语言发展史.
随机推荐
- UESTC1013-我的魔法栈-模拟/排列组合
有一个串,有黑色和白色两种元素.一次操作可以把最上面的白色元素变成黑色,同时把这个元素上面的所有元素变成白色. 给你一个30以内的串,计算变成全黑时,元素变化的总和. 我用的方法比较笨,打表处理了1- ...
- ☆ [HDU4825] Xor Sum「最大异或和(Trie树)」
传送门:>Here< 题意:给出一个集合,包含N个数,每次询问给出一个数x,问x与集合中的一个数y异或得到最大值时,y是多少? 解题思路 由于N,M非常大,暴力显然不行.抓住重点是异或,所 ...
- 不可解问题之停机问题(Undecidable Problem Halting Problem)
计算机技术已运用到人类生活的方方面面,帮助人类解决各种问题.可你是否有想过,计算机是否能为人类解决所有问题呢? 假如你是一个程序猿,你已编写过很多程序.有些程序一下子就能出结果,有些程序则好久都没有显 ...
- 【XSY2719】prime 莫比乌斯反演
题目描述 设\(f(i)\)为\(i\)的不同的质因子个数,求\(\sum_{i=1}^n2^{f(i)}\) \(n\leq{10}^{12}\) 题解 考虑\(2^{f(i)}\)的意义:有\(f ...
- new Date()导致日期增加了一天
问题是:将字符串 "Sun Nov 12 14:00:00 CST 2017" 转成Date类型 有一个简单的方法是直接使用new Date(),但是这个方法对于某些日期的计算, ...
- anaconda4.2.0
上改完cv2那个文件夹后,发现在使用导入的cv2中的方法时没有代码提示,于是搞啊搞,终于让我搞坏了mmp,这也太脆弱了. 无奈组装了一个全新的方法 过程比较坎坷也就没怎么记录 我的版本是选择最后一个o ...
- [NOIp2012] 国王游戏(排序 + 贪心 + 高精度)
题意 给你两个长为 \(n+1\) 的数组 \(a,b\) ,你需要定义一个顺序 \(p\) (\(p_0\) 永远为 \(0\)) 能够最小化 \[ \max_{i=1}^{n} \frac{\pr ...
- bzoj1047/luogu2216 理想的正方形 (单调队列)
开b组单调队列,分别维护此时某一列中的最大/最小值 然后我每次把它们的头取出来,塞到维护行的单调队列里,就是n*n的最大/最小值 #include<bits/stdc++.h> #defi ...
- 解决关于confluence缓慢 字体乱码 宏乱码 编辑不能贴图等问题
应用场景:Confluence软件不用多说,与Jira一样,都是atlassion的精品软件,不再介绍. 这里因为使用的是破解版的confluence,故遇见一些问题,只能百度谷歌自行解决,也在此记录 ...
- Vim常用插件安装及配置方法
Vundle 安装 git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim 配置 vimrc首部添 ...