日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Java 集合中的方法性能分析

發(fā)布時(shí)間:2025/6/17 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 集合中的方法性能分析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 前言
  • 一、List集合
    • 1.1、Collection 中 get() 和 remove()方法的效率
      • 示例一
      • 示例二
  • 總結(jié)


前言

??????暫無(wú)
??????
??????
??????
??????

一、List集合

1.1、Collection 中 get() 和 remove()方法的效率

示例一

public static int sum(List<Integer> ls){int total=0;for(int i=0;i<ls.size();i++){total+=ls.get(i);}return total;}

??????上面這個(gè)求一個(gè) List 的所有元素和的代碼,在 ArrayList 中的時(shí)間復(fù)雜度為 O(n),在 LinkedList 中的時(shí)間復(fù)雜度為 O(n2)。

??????區(qū)別在于 get() 方法,它在 ArrayList 中的為常數(shù)時(shí)間,在 LinkedList 中為線性時(shí)間。當(dāng)然 remove() 方法也是一樣的。但是采用迭代器來(lái)實(shí)現(xiàn)的話,上面代碼的運(yùn)行時(shí)間不管是 ArrayList 還是 LinkedList ,都是線性時(shí)間 O(n)。

??????contains() 方法在這二者中均為線性時(shí)間。

示例二

??????刪除一個(gè)表中的所有偶數(shù)元素。
.
??????可能的想法是:創(chuàng)建一個(gè)新的只包含舊表中奇數(shù)元素的表,刪除舊表中元素,再將新表拷貝過(guò)去即可。

??????如果不采用這種創(chuàng)建新表的話,比如采用 remove() 方法的話,見(jiàn)代碼1:

public static void removeEvens(List<Integer> ls){int i=0;while(i<ls.size()){if(ls.get(i)%2==0)ls.remove(i);else++i;}}

??????代碼1在 ArrayList 上由于 remove() 的原因(數(shù)組移動(dòng)花費(fèi)線性時(shí)間),它花費(fèi)二次時(shí)間。而 LinkedLIst 由于 get() 和 remove() 的原因(元素搜索花費(fèi)線性時(shí)間),所以它也花費(fèi)二次時(shí)間。

??????采用迭代器來(lái)實(shí)現(xiàn),見(jiàn)代碼2

public static void removeEvens(List<Integer> ls){Iterator it=ls.iterator();while(it.hasNext()){int tmp=(int)it.next();if(tmp%2==0)it.remove();}}

??????用迭代器的話有什么不同呢?對(duì)于 ArrayList 而言,迭代器的 remove() 仍然花費(fèi)線性時(shí)間,因?yàn)閿?shù)組需要移動(dòng),而整個(gè)程序仍然花費(fèi)二次時(shí)間;但是對(duì)于 LinkedList 而言,迭代器的 remove() 花費(fèi)常數(shù)時(shí)間,因?yàn)樵摰骺偸俏挥谛枰粍h除的節(jié)點(diǎn)(或者在其附近),所以整個(gè)程序僅花費(fèi)線性時(shí)間,而不是二次時(shí)間。

??????需要說(shuō)明的是 ListIterator 接口中的 add(Object o) 方法和 remove() 方法類似,在 LinkedList 中花費(fèi)常數(shù)時(shí)間。

??????自定義的 ArrayList 和 LinkedList 參見(jiàn)博客:https://blog.csdn.net/Little_ant_/article/details/121637930 通過(guò)其中的細(xì)節(jié)可以體會(huì)上面所說(shuō)這幾個(gè)方法的效率。

??????
??????
??????
??????
??????
??????
??????
??????
??????
??????
??????
??????
??????
??????
??????
??????
??????
??????
??????
??????
??????
??????
??????
??????
??????
??????
??????


總結(jié)

??????未完~

總結(jié)

以上是生活随笔為你收集整理的Java 集合中的方法性能分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。