日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 集合中的方法性能分析

發布時間:2025/6/17 java 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 集合中的方法性能分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

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


前言

??????暫無
??????
??????
??????
??????

一、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;}

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

??????區別在于 get() 方法,它在 ArrayList 中的為常數時間,在 LinkedList 中為線性時間。當然 remove() 方法也是一樣的。但是采用迭代器來實現的話,上面代碼的運行時間不管是 ArrayList 還是 LinkedList ,都是線性時間 O(n)。

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

示例二

??????刪除一個表中的所有偶數元素。
.
??????可能的想法是:創建一個新的只包含舊表中奇數元素的表,刪除舊表中元素,再將新表拷貝過去即可。

??????如果不采用這種創建新表的話,比如采用 remove() 方法的話,見代碼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() 的原因(數組移動花費線性時間),它花費二次時間。而 LinkedLIst 由于 get() 和 remove() 的原因(元素搜索花費線性時間),所以它也花費二次時間。

??????采用迭代器來實現,見代碼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();}}

??????用迭代器的話有什么不同呢?對于 ArrayList 而言,迭代器的 remove() 仍然花費線性時間,因為數組需要移動,而整個程序仍然花費二次時間;但是對于 LinkedList 而言,迭代器的 remove() 花費常數時間,因為該迭代器總是位于需要被刪除的節點(或者在其附近),所以整個程序僅花費線性時間,而不是二次時間。

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

??????自定義的 ArrayList 和 LinkedList 參見博客:https://blog.csdn.net/Little_ant_/article/details/121637930 通過其中的細節可以體會上面所說這幾個方法的效率。

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


總結

??????未完~

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。