java中如何高效判斷陣列中是否包含某個特定的值

2021-07-16 01:28:25 字數 2337 閱讀 4094

public

static

boolean

uselist(string arr, string targetvalue)

public

static

boolean

useset(string arr, string targetvalue)

public

static

boolean

useloop(string arr, string targetvalue)

return

false

; }

下面的**是錯誤的,之所以列在下面是出於完整性考慮(四種判斷方式),binarysearch()二分查詢只能用於有序陣列。

執行下面程式,你有可能會得到異常結果;

public

static

boolean

usearraysbinarysearch(string arr, string targetvalue)

public static void main(string args) ;

// use list

long starttime = system.nanotime();

for (int i = 0; i < 100000; i++)

long endtime = system.nanotime();

long duration = endtime - starttime;

system.out.println("uselist: " + duration / 1000000);

// use set

starttime = system.nanotime();

for (int i = 0; i < 100000; i++)

endtime = system.nanotime();

duration = endtime - starttime;

system.out.println("useset: " + duration / 1000000);

// use loop

starttime = system.nanotime();

for (int i = 0; i < 100000; i++)

endtime = system.nanotime();

duration = endtime - starttime;

system.out.println("useloop: " + duration / 1000000);

// use arrays.binarysearch()

starttime = system.nanotime();

for (int i = 0; i < 100000; i++)

endtime = system.nanotime();

duration = endtime - starttime;

system.out.println("usearraybinary: " + duration / 1000000);

}執行結果:

uselist: 13

useset: 72

useloop: 5

usearraysbinarysearch: 9

string arr = new string[1000];

random s = new

random();

for (int i = 0; i < 1000; i++)

執行結果:

uselist: 112

useset: 2055

useloop: 99

usearraybinary: 12

從測試結果可以看出,使用簡單的迴圈語句比使用任何集合都高效,很大一部分開發人員選擇使用第一種方法(list),但這種方法其實是相對低效的。在使用集合提供的api前,需要把乙個陣列放到集合裡,這需要消耗一定的時間,特別是對於set集合;(注:其實arraylist集合的效能跟普通的迴圈語句差不多,因為對於arraylist,轉換成集合的時候,僅僅是改變了內部的陣列索引,遍歷判斷的時候,跟普通的迴圈語句類似);

如果要使用arrays.binarysearch()方法,前提是陣列要有序,在這個測試demo中,很顯然陣列是無序的,因此不該被使用;

事實上,如果你確實需要高效的去檢查陣列或集合中是否包含某個值,乙個有序列表或者有序樹能把時間複雜度降低到o(log(n)),或者使用雜湊集合

,時間複雜度為o(1);

連線風一樣的碼農:

java中如何判斷String中的內容是否為數字

判斷字串是否是整數 public static boolean isinteger string value catch numberformatexception e 判斷字串是否是浮點數 public static boolean isdouble string value catch numb...

Java中高效的判斷陣列中某個元素是否存在詳解

一 檢查陣列是否包含某個值的方法 使用list public static boolean uselist string arr,string targetvalue 使用set public static boolean useset string arr,string targetvalue 使...

如何判斷是否是陣列

typeof 只能返回object eg a 1,2,3 js提供的方法 a array.isarray a 從建構函式入手 b a instanceof array 從原型入手 c array.prototype.isprototypeof a 根據物件的class 屬性 類屬性 跨原型鏈呼叫to...