一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|

服務(wù)器之家 - 編程語言 - JAVA教程 - Java中ArrayList和LinkedList之間的區(qū)別_動力節(jié)點Java學(xué)院整理

Java中ArrayList和LinkedList之間的區(qū)別_動力節(jié)點Java學(xué)院整理

2020-09-24 15:42動力節(jié)點 JAVA教程

這篇文章主要為大家詳細(xì)介紹了Java中ArrayList和LinkedList之間的區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、ArrayList

ArrayList是一個可以處理變長數(shù)組的類型,這里不局限于“數(shù)”組,ArrayList是一個泛型類,可以存放任意類型的對象。顧名思義,ArrayList是一個數(shù)組列表,因此其內(nèi)部是使用一個數(shù)組來存放對象的,因為Object是一切類型的父類,因而ArrayList內(nèi)部是有一個Object類型的數(shù)組類存放對象。ArrayList類常用的方法有add()、clear()、get()、indexOf()、remove()、sort()、toArray()、toString()等等,同時ArrayList內(nèi)部有一個私有類實現(xiàn)Iterator接口,因此可以使用iterator()方法得到ArrayList的迭代器,同時,還有一個私有類實現(xiàn)了ListIterator接口,因此ArrayList也可以調(diào)用listIterator()方法得到ListIterator迭代器。
由于ArrayList是依靠數(shù)組來存放對象的,只不過封裝起來了而已,因此其一些查找方法的效率都是O(n),跟普通的數(shù)組效率差不多,只不過這個ArrayList是一個可變”數(shù)組“,并且可以存放一切指定的對象。
另外,由于ArrayList的所有方法都是默認(rèn)在單一線程下進(jìn)行的,因此ArrayList不具有線程安全性。若想在多線程下使用,應(yīng)該使用Colletions類中的靜態(tài)方法synchronizedList()對ArrayList進(jìn)行調(diào)用即可。

二、LinkedList

LinkedList可以看做為一個雙向鏈表,所有的操作都可以認(rèn)為是一個雙向鏈表的操作,因為它實現(xiàn)了Deque接口和List接口。同樣,LinkedList也是線程不安全的,如果在并發(fā)環(huán)境下使用它,同樣用Colletions類中的靜態(tài)方法synchronizedList()對LinkedList進(jìn)行調(diào)用即可。

在LinkedList的內(nèi)部實現(xiàn)中,并不是用普通的數(shù)組來存放數(shù)據(jù)的,而是使用結(jié)點<Node>來存放數(shù)據(jù)的,有一個指向鏈表頭的結(jié)點first和一個指向鏈表尾的結(jié)點last。不同于ArrayList只能在數(shù)組末尾添加數(shù)據(jù),LinkList可以很方便在鏈表頭或者鏈表尾插入數(shù)據(jù),或者在指定結(jié)點前后插入數(shù)據(jù),還提供了取走鏈表頭或鏈表尾的結(jié)點,或取走中間某個結(jié)點,還可以查詢某個結(jié)點是否存在。add()方法默認(rèn)在鏈表尾部插入數(shù)據(jù)。總之,LinkedList提供了大量方便的操作方法,并且它的插入或增加等方法的效率明顯高于ArrayList類型,但是查詢的效率要低一點,因為它是一個雙向鏈表。

因此,LinkedList與ArrayList最大的區(qū)別是LinkedList更加靈活,并且部分方法的效率比ArrayList對應(yīng)方法的效率要高很多,對于數(shù)據(jù)頻繁出入的情況下,并且要求操作要足夠靈活,建議使用LinkedList;對于數(shù)組變動不大,主要是用來查詢的情況下,可以使用ArrayList。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.* ;
public class ListDemo01{
  public static void main(String args[]){
    List<Integer> li = new LinkedList<Integer>() ;
    long startTime = System.currentTimeMillis() ;
    for(int i=0;i<1000000;i++){
      li.add(0,i) ;        //print : 803
      //li.add(i) ;        //print : 790
    }
    long endTime = System.currentTimeMillis() ;
    System.out.println(endTime-startTime) ;
  }
}

下面的代碼得不出結(jié)果速度太慢

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.* ;
public class ListDemo01{
  public static void main(String args[]){
    List<Integer> li = new LinkedList<Integer>() ;
    for(int i=0;i<1000000;i++){
      li.add(0,i) ;        //print : 803
      //li.add(i) ;        //print : 790
    }
    long startTime = System.currentTimeMillis() ;
    for(int i=0;i<1000000;i++){
      li.get(i) ;
    }
    long endTime = System.currentTimeMillis() ;
    System.out.println(endTime-startTime) ;
  }
}

下面化成ArrayList速度就超快

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.* ;
public class ListDemo01{
  public static void main(String args[]){
    List<Integer> li = new ArrayList<Integer>() ;
    for(int i=0;i<1000000;i++){
      li.add(i) ;       
    }
    long startTime = System.currentTimeMillis() ;
    for(int i=0;i<1000000;i++){
      li.get(i) ;   //print : 15    
    }
    long endTime = System.currentTimeMillis() ;
    System.out.println(endTime-startTime) ;
  }
}

remove方法對LinkedList類的使用

a.利用iterator類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.* ;
public class ListDemo01{
  public static void main(String args[]){
    List<Integer> li = new LinkedList<Integer>() ;
    for(int i=0;i<1000000;i++){
      li.add(i) ;       
    }
    long startTime = System.currentTimeMillis() ;
    Iterator<Integer> it = li.iterator() ;
    while(it.hasNext()){
      if(it.next()%2==0){
        it.remove() ;
      }
    }
    long endTime = System.currentTimeMillis() ;
    System.out.println(endTime-startTime) ;
  }
}

b.不利用iterator的話則則需要調(diào)用get方法。則效率很低

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.* ;
public class ListDemo01{
  public static void main(String args[]){
    List<Integer> li = new LinkedList<Integer>() ;
    for(int i=0;i<1000000;i++){
      li.add(i) ;       
    }
    long startTime = System.currentTimeMillis() ;
    for(int i=0;i<10000;i++){
      if(li.get(i)%2==0){
        li.remove(i) ;
      }
    }
    long endTime = System.currentTimeMillis() ;
    System.out.println(endTime-startTime) ;
  }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲小视频 | 99国产情在线视频 | 牛人国产偷窥女洗浴在线观看 | 国产精品四虎在线观看免费 | 国内精品福利丝袜视频_速 国内精品91久久久久 | 国产午夜免费 | 美女把腿开让我 | 色婷婷久久综合中文久久一本` | 国产亚洲99影院 | 国产在线视频欧美亚综合 | 青青草国产免费国产是公开 | 风间由美一区二区播放合集 | 短篇小说肉 | 国产高清在线视频一区二区三区 | 国产麻豆精品入口在线观看 | 久久re这里精品23 | 袖珍人与大黑人性视频 | 午夜一个人在线观看完整版 | 日韩美女强理论片 | 亚洲天天综合网 | 网站色小妹 | 成年人免费观看视频网站 | 亚洲国产精品婷婷久久久久 | 亚洲swag精品自拍一区 | 青青青手机在线观看 | 91精品国产品国语在线不卡 | 免费在线观看中文字幕 | 无限在线观看免费入口 | 99精品国产在现线免费 | 男人猛戳女人下部30分钟 | 亚洲偷窥图区色 | 四虎永久在线精品免费影视 | 亚洲免费在线观看视频 | 99精品视频免费在线观看 | 成人一区二区免费中文字幕 | 思思91精品国产综合在线 | 免费观看大片毛片 | 国产91一区二区在线播放不卡 | 久久视频精品3线视频在线观看 | 亚州综合网 | 亚洲欧美午夜 |