Java List操作
一、List:、有顺序以线性方式存储,可以存放重复对象
线程安全方法:List list = Collections.synchronizedList(new LinkedList(...));
LinkedList:双向链表实现存储 索引数据慢插入数度较快 线程不安全(比安全性能好)
ArrayList:数组方式存储数据 索引数据快插入数据慢 线程不安全
Vector:数组方式存储数据 索引数据快插入数据慢 线程安全
Stack:继承自Vector,实现一个后进先出的堆栈
ArrayList:
import java.util.ArrayList;
import java.util.List; public class Main {
public static void main(String[] args) {
List books = new ArrayList();
//向books集合中添加三个元素
books.add(new String("11111111111"));
books.add(new String("22222222222"));
books.add(new String("33333333333"));
System.out.println(books); //将新字符串对象插入在第二个位置
books.add(1 , new String("44444444444"));
for (int i = 0 ; i < books.size() ; i++ )
{
System.out.println(books.get(i));
} //删除第三个元素
books.remove(2);
System.out.println(books); //判断指定元素在List集合中位置:输出1,表明位于第二位
System.out.println(books.indexOf(new String("44444444444"))); //①
//将第二个元素替换成新的字符串对象
books.set(1, new String("LittleHann"));
System.out.println(books); //将books集合的第二个元素(包括)
//到第三个元素(不包括)截取成子集合
System.out.println(books.subList(1 , 2));
}
}
Result:
[11111111111, 22222222222, 33333333333]
11111111111
44444444444
22222222222
33333333333
[11111111111, 44444444444, 33333333333]
1
[11111111111, LittleHann, 33333333333]
[LittleHann]
Stack:
import java.util.Stack; public class Main {
public static void main(String[] args) {
Stack v = new Stack();
//依次将三个元素push入"栈"
v.push("11");
v.push("22");
v.push("33"); System.out.println(v);
//访问第一个元素,但并不将其pop出"栈"
System.out.println(v.peek());
System.out.println(v);
//pop出第一个元素
System.out.println(v.pop());
System.out.println(v);
}
}
Result:
[11, 22, 33]
33
[11, 22, 33]
33
[11, 22]
LinkedList:
import java.util.LinkedList; public class Main {
public static void main(String[] args) {
LinkedList books = new LinkedList(); //将字符串元素加入队列的尾部(双端队列)
books.offer("11");
//将一个字符串元素加入栈的顶部(双端队列)
books.push("22");
//将字符串元素添加到队列的头(相当于栈的顶部)
books.offerFirst("33");
System.out.println(books);
//访问、并不删除栈顶的元素
System.out.println(books.peekFirst());
//访问、并不删除队列的最后一个元素
System.out.println(books.peekLast());
//将栈顶的元素弹出"栈"
System.out.println(books.pop());
//下面输出将看到队列中第一个元素被删除
System.out.println(books);
//访问、并删除队列的最后一个元素
System.out.println(books.pollLast());
//下面输出将看到队列中只剩下中间一个元素:
System.out.println(books);
}
}
Result:
[33, 22, 11]
33
11
33
[22, 11]
11
[22]
PriorityQueue:
PriorityQueue pq = new PriorityQueue();
//下面代码依次向pq中加入四个元素
pq.offer(6);
pq.offer(-3);
pq.offer(9);
pq.offer(0); //输出pq队列,并不是按元素的加入顺序排列,
//而是按元素的大小顺序排列,输出[-3, 0, 9, 6]
System.out.println(pq);
//访问队列第一个元素,其实就是队列中最小的元素:-3
System.out.println(pq.poll());
Result:
[-3, 0, 9, 6]
-3
PriorityQueue不允许插入null元素,它还需要对队列元素进行排序
ArrayDeque:
import java.util.ArrayDeque; public class Main { public static void main(String[] args) {
ArrayDeque stack = new ArrayDeque();
//依次将三个元素push入"栈"
stack.push("11");
stack.push("22");
stack.push("33");
System.out.println(stack);
//访问第一个元素,但并不将其pop出"栈"
System.out.println(stack.peek());
System.out.println(stack);
//pop出第一个元素
System.out.println(stack.pop());
System.out.println(stack);
}
}
结果:
[33, 22, 11]
33
[33, 22, 11]
33
[22, 11]
List集合类应用场景:
1. java提供的List就是一个"线性表接口",ArrayList(基于数组的线性表)、LinkedList(基于链的线性表)是线性表的两种典型实现
2. Queue代表了队列,Deque代表了双端队列(既可以作为队列使用、也可以作为栈使用)
3. 因为数组以一块连续内存来保存所有的数组元素,所以数组在随机访问时性能最好。所以的内部以数组作为底层实现的集合在随机访问时性能最好。
4. 内部以链表作为底层实现的集合在执行插入、删除操作时有很好的性能
5. 进行迭代操作时,以链表作为底层实现的集合比以数组作为底层实现的集合性能好
http://www.cnblogs.com/LittleHann/p/3690187.html
http://blog.csdn.net/speedme/article/details/22398395
Java List操作的更多相关文章
- Java实现操作dos命令
java实现操作dos命令的两种方式 1.读取文件中的命令 package com; import java.io.InputStream; public class cmd { public sta ...
- JAVA 链表操作:循环链表
主要分析示例: 一.循环链表简述 二.单链表循环链表 三.双链表循环链表 一.循环链表简述 循环链表即链表形成了一个循环的结构,尾节点不再指向NULL,而是指向头节点HEAD,此时判定链表的结束是尾节 ...
- java日期操作大全
摘自(http://www.blogjava.net/i369/articles/83483.html) java日期操作 大全 先来一个: 取得指定月份的第一天与取得指定月份的最后一天 http ...
- Java CSV操作(导出和导入)
Java CSV操作(导出和导入) CSV是逗号分隔文件(Comma Separated Values)的首字母英文缩写,是一种用来存储数据的纯文本格式,通常用于电子表格或数据库软件.在 CSV文件 ...
- Java开发--操作MongoDB
http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过前一篇文章我们 ...
- hive-通过Java API操作
通过Java API操作hive,算是测试hive第三种对外接口 测试hive 服务启动 package org.admln.hive; import java.sql.SQLException; i ...
- HDFS的Java客户端操作代码(HDFS的查看、创建)
1.HDFS的put上传文件操作的java代码: package Hdfs; import java.io.FileInputStream; import java.io.FileNotFoundEx ...
- Java文件操作源码大全
Java文件操作源码大全 1.创建文件夹 52.创建文件 53.删除文件 54.删除文件夹 65.删除一个文件下夹所有的文件夹 76.清空文件夹 87.读取文件 88.写入文件 99.写入随机文件 9 ...
- Java路径操作具体解释
1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或文件夹在硬盘上真正的路径.(URL和物理路径)比如: C:\xyz\test.txt 代表了test.txt文件的绝对路径.http://w ...
- Java 文件操作大全
Java 文件操作大全 //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if (!myFolderPat ...
随机推荐
- [转]SEP 11.x 迁移
Sepm 迁移/灾难恢复 条件:更换服务器主机/重装服务器系统,但保持主机ip地址不更改,主机名不更改. 备份步骤: Login 服务器控制台,进入"管理员" ...
- Cinder相关命令收集
1. 重置状态 source admin-openrc.sh cinder reset-state 51108241-7ffe-44a8-acfa-4cddac8d4793
- 高手指南PHP安装配置
高手指南PHP安装配置 2014-11-05 12:57:13 来源: 评论:0 次 点击:12 次 | 发布人:登陆查看 PHP的快速发展,它的功能越来越强大,运用它也变得很方便,下面我 ...
- Unity4.5版本DLL库名字问题
背景 在unity4.2版本中可以在Android中使用的so链接库,在Unity4.5中使不了-- [DllImport("libclient.so", EntryPoint ...
- MZhong's Resume
MATTHEW.ZHONG Male,27 Age Front-End Developer matthew.zhong@morningstar.com OBJECTIVE My objective i ...
- 基于LR的数据库性能测试
web services协议 在LR的web services协议中提供了如下函数进行数据库的连接和执行sql语句,以实现对数据库的性能测试,也可以实现向数据库中自动生成批量数据. lr_db_dis ...
- Machine Learning in Action -- Support Vector Machines
虽然SVM本身算法理论,水比较深,很难懂 但是基本原理却非常直观易懂,就是找到与训练集中支持向量有最大间隔的超平面 形式化的描述: 其中需要满足m个约束条件,m为数据集大小,即数据集中的每个数据点fu ...
- AES加密时抛出 Illegal key size or default parameters
使用AES加密时,当密钥大于128时,代码会抛出java.security.InvalidKeyException: Illegal key size or default parameters Il ...
- NSString的常见方法
//1.创建常量字符串. NSString *astring = @"This is a String!"; //2.创建空字符串,给予赋值. NSString *astrin ...
- java JDK8 学习笔记——第18章 自定义泛型、枚举与注释
第十八章 自定义泛型.枚举与注释 18.1 自定义泛型 泛型定义: (1)仅定义在方法上的泛型语法 (2)用来限制泛型可用类型的extends与super关键字(3)?类型通配字符的使用 18.1.1 ...