gpt4 book ai didi

区分Java中的ArrayList和LinkedList

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 28 4
gpt4 key购买 nike

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));
      }

区分Java中的ArrayList和LinkedList

从以上结果,我i们可以看出 ArrayList更适合读取数据,linkedList更多的时候添加或删除数据.

ArrayList:内部是使用可増长数组实现的,所以是用get和set方法是花费少数时间的,但是如果插入元素和删除元素,除非插入和删除的位置都在表末尾,否则代码开销会很大,因为里面需要数组的移动.

LinkedList:是使用双链表实现的,所以get会非常消耗资源,除非位置离头部很近。但是插入和删除元素花费少数时间.

二:ArrayList和LinkedList的共有方法(即List的方法):

区分Java中的ArrayList和LinkedList

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( "集合中没有小佳" );
     }
   }
}

测试运行结果如下:

区分Java中的ArrayList和LinkedList

三:LinkedList的特有方法:

区分Java中的ArrayList和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的详细内容,更多关于Java中ArrayList和LinkedList的资料请关注我其它相关文章! 。

原文链接:https://www.cnblogs.com/liangbaolong/p/12884574.html 。

最后此篇关于区分Java中的ArrayList和LinkedList的文章就讲到这里了,如果你想了解更多关于区分Java中的ArrayList和LinkedList的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0