- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章区分Java中的ArrayList和LinkedList由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
一:ArrayList和LinkedList的大致区别如下
1.ArrayList是实现了基于动态数组的数据结构,ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高 。
2.LinkedList基于链表的数据结构, 插入、删除元素时效率比较高 故:【插入、删除操作频繁时,可使用LinkedList来提高效率】 。
LinkedList提供对头部和尾部元素进行添加和删除操作的方法,插入/删除第一个和最后一个效率比较高; 。
3:ArrayList和LinkedList都是List接口的实现,都存储一组不唯一,有序(插入顺序)的对象, 对元素进行添加、删除等操作[ 即:List的性质] 。
4.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针.
5.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据.
6:LinkedList比ArrayList更占内存 。
eg:(代码示例01)----ArrayList与LinkedLis的数据添加和查找耗时对比 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import
java.util.ArrayList;
import
java.util.LinkedList;
import
java.util.List;
public
class
HFSD {
static
final
int
N=
50000
;
//添加5000条数据
static
long
timeList(List list){
//添加数据所需时间
long
start=System.currentTimeMillis();
Object o =
new
Object();
for
(
int
i=
0
;i<N;i++) {
list.add(
0
, o);
}
return
System.currentTimeMillis()-start;
}
static
long
readList(List list){
//查找数据所需时间
long
start=System.currentTimeMillis();
for
(
int
i=
0
,j=list.size();i<j;i++){
}
return
System.currentTimeMillis()-start;
}
static
List addList(List list){
Object o =
new
Object();
for
(
int
i=
0
;i<N;i++) {
list.add(
0
, o);
}
return
list;
}
public
static
void
main(String[] args) {
System.out.println(
"ArrayList添加"
+N+
"条耗时:"
+timeList(
new
ArrayList()));
System.out.println(
"LinkedList添加"
+N+
"条耗时:"
+timeList(
new
LinkedList()));
List list1=addList(
new
ArrayList<>());
List list2=addList(
new
LinkedList<>());
System.out.println(
"ArrayList查找"
+N+
"条耗时:"
+readList(list1));
System.out.println(
"LinkedList查找"
+N+
"条耗时:"
+readList(list2));
}
|
从以上结果,我i们可以看出 ArrayList更适合读取数据,linkedList更多的时候添加或删除数据.
ArrayList:内部是使用可増长数组实现的,所以是用get和set方法是花费少数时间的,但是如果插入元素和删除元素,除非插入和删除的位置都在表末尾,否则代码开销会很大,因为里面需要数组的移动.
LinkedList:是使用双链表实现的,所以get会非常消耗资源,除非位置离头部很近。但是插入和删除元素花费少数时间.
二:ArrayList和LinkedList的共有方法(即List的方法):
eg:(代码示例02)----ArrayList代码示例 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package
JIhekuangjia006.ArrayList;
/**
* 小猪类
*/
public
class
Pig {
private
String name;
private
String sex;
public
Pig(String name,String sex){
this
.name=name;
this
.sex=sex;
}
public
void
setName(String name){
this
.name=name;
}
public
String getName(){
return
name;
}
public
void
setSex(String sex){
this
.sex=sex;
}
public
String getSex(){
return
sex;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
package
JIhekuangjia006.ArrayList;
import
java.util.*;
/**
* 使用ArrayList集合进行操作数据
*/
public
class
Test1 {
public
static
void
main(String[] args) {
//1.存储小猪信息
Pig xiaojia=
new
Pig(
"小佳"
,
"母"
);
//索引为0
Pig xiaolong=
new
Pig(
"小龙"
,
"公"
);
//索引为1
Pig jiajia=
new
Pig(
"佳佳"
,
"女"
);
//索引为2
Pig longlong=
new
Pig(
"龙龙"
,
"男"
);
//索引为3(与数组相同,从0开始)
//为小猪排序
List list=
new
ArrayList();
//直接将元素添加排序
list.add(xiaojia);
list.add(jiajia);
list.add(xiaolong);
//将龙龙添加到索引为2的位置
list.add(
2
,longlong);
//list.add(jiajia);//List 接口存储一组不唯一,有序(插入顺序)的对象
//2.获得小猪的总数
//通过list.size()方法获取元素的个数
list.size();
System.out.println(
"小猪的总数为"
+list.size());
//3.逐条打印小猪信息
//方法一:for循环与get()方法配合实现遍历
for
(
int
i=
0
;i<list.size();i++){
Pig center=(Pig)list.get(i);
//因为list.get()的返回值为Object的类型,所以需要强转为Pig的类型
System.out.println(center.getName()+
","
+center.getSex());
}
//方法二:通过迭代器Iterator实现遍历
// Iterator it=list.iterator();
// while (it.hasNext()){
// Pig center=(Pig)it.next();
// System.out.println(center.getName()+","+center.getSex());
// }
System.out.println(
"*********************************************************"
);
//4.删除小猪信息
//删除第一只小猪,小佳
list.remove(
0
);
//与数组下标相对应
//删除指定小猪,小龙
list.remove(xiaolong);
//将剩下的小猪信息进行输出
System.out.println(
"删除之后还有"
+list.size()+
"只小猪,\n分别是:"
);
for
(
int
i=
0
;i<list.size();i++){
/**
* Object get(int index)返回指定索引位置处的元素。取出的元素是Object类型,
* 使用前需要进行强制类型转换
*/
Pig center=(Pig)list.get(i);
//所以需要强转为Pig的类型
System.out.println(center.getName()+
","
+center.getSex());
}
System.out.println(
"*******************************************************"
);
//5.判断集合中是否包含指定小猪
if
(list.contains(xiaojia)){
//使用list.contains()方法进行判断
System.out.println(
"集合中有小佳"
);
}
else
{
System.out.println(
"集合中没有小佳"
);
}
}
}
|
测试运行结果如下:
三:LinkedList的特有方法:
eg:(代码示例03)----LinkedList代码示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package
JIhekuangjia006.LinkedList;
/**
* 小猪类
*/
public
class
Pig {
private
String name;
//昵称
private
String sex;
//性别
public
Pig(String name,String sex){
this
.name=name;
this
.sex=sex;
}
public
void
setName(String name){
this
.name=name;
}
public
String getName(){
return
name;
}
public
void
setSex(String sex){
this
.sex=sex;
}
public
String getSex(){
return
sex;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
package
JIhekuangjia006.LinkedList;
import
java.util.Iterator;
import
java.util.LinkedList;
/**
* 使用LinkedList集合操作数据
*/
public
class
Test2 {
public
static
void
main(String[] args) {
//1.存储小猪信息
Pig xiaojia=
new
Pig(
"小佳"
,
"母"
);
//索引为0
Pig xiaolong=
new
Pig(
"小龙"
,
"公"
);
//索引为1
Pig jiajia=
new
Pig(
"佳佳"
,
"女"
);
//索引为2
Pig longlong=
new
Pig(
"龙龙"
,
"男"
);
//索引为3(与数组相同,从0开始)
//为小猪排序
LinkedList list=
new
LinkedList();
//直接将元素添加排序
list.add(xiaolong);
list.add(longlong);
list.addFirst(jiajia);
//将佳佳添加到第一个位置
list.addLast(xiaojia);
//将小龙添加到最后一个位置
//list.add(jiajia);//List 接口存储一组不唯一,有序(插入顺序)的对象
//2.获得小猪的总数
//通过list.size()方法获取元素的个数
list.size();
System.out.println(
"小猪的总数为"
+list.size());
//3.逐条打印小猪的信息
//方法一:通过迭代器Iterator实现遍历
Iterator it=list.iterator();
while
(it.hasNext()){
Pig center=(Pig)it.next();
System.out.println(center.getName()+
","
+center.getSex());
}
//方法二:for循环与get()方法配合实现遍历
// for(int i=0;i<list.size();i++){
// Pig pig=(Pig)list.get(i);
// System.out.println(pig.getName()+","+pig.getSex());
// }
System.out.println(
"************************************************"
);
//4.
//获取第一只小猪的信息
Pig center=(Pig)list.getFirst();
System.out.println(
"第一条狗狗信息是:"
+center.getName()+
","
+center.getSex());
//获取最后一只小猪的信息
Pig center1=(Pig)list.getLast();
System.out.println(
"最后一条狗狗信息是:"
+center1.getName()+
","
+center1.getSex());
System.out.println(
"*****************************************************"
);
//5.删除第一只小猪和最后一只小猪
list.removeFirst();
list.removeLast();
System.out.println(
"*****************************************************"
);
//6.输出剩下小猪的信息
System.out.println(
"剩下还有"
+list.size()+
"只小猪,\n分别是:"
);
for
(
int
i=
0
;i<list.size();i++){
Pig pig=(Pig)list.get(i);
System.out.println(pig.getName()+
","
+pig.getSex());
}
//7.判断集合中是否存在小佳
if
(list.contains(xiaojia)){
System.out.println(
"集合中存在小佳"
);
}
else
{
System.out.println(
"集合中不存在小佳"
);
}
}
}
|
测试运行结果如下:
以上就是区分Java中的ArrayList和LinkedList的详细内容,更多关于Java中ArrayList和LinkedList的资料请关注我其它相关文章! 。
原文链接:https://www.cnblogs.com/liangbaolong/p/12884574.html 。
最后此篇关于区分Java中的ArrayList和LinkedList的文章就讲到这里了,如果你想了解更多关于区分Java中的ArrayList和LinkedList的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
将一个数组列表分配给另一个数组列表与在两个数组列表之间使用 addAll 方法有什么区别? 1 > arrayList = arrayList;//应该将后面的arrayList的值分配给第一个。 2
所以我在将 ArrayList 添加到我的 ArrayList 时遇到了一些问题。将其想象成一张 table 。 下面是一些示例代码: ArrayList currentRow = new Arra
我一直在尝试转换 ArrayList> to ArrayList> 的字符串 这是我尝试构建的代码。 public void convertString (ArrayList> templist) {
我有一个 ArrayList (alal) 和一个 ArrayList(al) 的 ArrayList。我想将 al 插入 alal,但我希望 alal.get(0) 包含 al 拥有的所有内容以及添
很抱歉标题太长,如果您能想到更好的标题,请告诉我! 我正在做的是尝试创建一个 ArrayList 的 ArrayList 并将 ArrayList 逐个添加到其中。两个AL>我所拥有的称为三角形和正方
我有带有值的 mList2。存在具有相同 id 的值。如何获取具有相同 id 的对象分组的 List 或 ArrayList 并将其添加到 ArrayList>? List mList2 = list
我正在创建一个 ArrayList的 ArrayList并添加 ArrayLists给它。但每次我对 ArrayList 进行更改时, 它反射(reflect)在 ArrayList 中. 示例: L
谁能解释一下ArrayList之间的区别是什么? , ArrayList和 ArrayList是什么时候使用它们?它们在实现层面上是相同的还是各自具有不同的含义? 最佳答案 ArrayList 特别是
这个问题在这里已经有了答案: Java generics: List> = new LinkedList>() is prohibited? (3 个答案) 关闭 9 年前。 为什么这段代码可以编译
我的 arraylistS 在覆盖数组列表中的行为类似于同一个实例。 我用其中一个来操作 i=0; manupulate((ArrayList)theCoveringRootArrayList.get
我们遇到这个错误 java.lang.NullPointerException at java.util.ArrayList.(Unknown Source) at de.mystuf
据我了解,ArrayList 类继承其父“List”类的 equals() 函数来查找两个成员对象是否相同。这是否意味着“contains()”线性搜索(使用“equal”)来查找 ArrayList
这个问题已经有答案了: What is the diamond operator in Java? (2 个回答) 已关闭 7 年前。 正如标题所说,在Java中,这两种语句有什么区别吗? 通常我都能
我正在尝试求解帕斯卡三角形。我有两个用 Java 编写的代码片段,第一个创建 inner ArrayList 几次并且对我来说效果很好。 但是在代码的第二个版本中,如果我修改 inner ArrayL
正如标题所示,我有两个 ArrayList。奇怪的是,在一个数组列表上设置一个值会改变另一个数组列表的值。 一些信息:这些是 Entry 类型的 ArrayList,每个列表都包含一个金额和一个值(这
我已经添加了一个项目到列表 a,然后添加了列表 a 到列表 b 并再次做了同样的事情。 我的问题是,如果我打印 b.get(0) 和 b.get(1),我会得到相同的列表,这两个项目都是 “一”和“二
我正在创建一个 ArrayList of ArrayList of ArrayList 的 ArrayList 并按以下方式填充它。它正确地填充它。我已经通过调试和 println 弄清楚了这一点。但
实现可以在 Arraylist 和 Integer 中存储任何级别的 ArrayList 的 ArrayList 的最佳方法是什么。 List> list = ArrayList(); 仅允许列表中最
在下面的示例中,我将如何将 ArrayList al4 的内容与其他 ArrayList 中的任何一个进行比较?以同样的方式,我将 al1 与 al2 进行了比较。 import java.util.
好的,所以我之前发布了一个线程,它回答了我的很多问题并帮助我改进了我的代码,但是,我遇到了另一个问题,我不知道为什么,但我认为也许该副本只是指向原始对象..(尽管我已尽力避免这种情况) 在我的游戏代码
我是一名优秀的程序员,十分优秀!