如何高效的查詢陣列中是否包含某個值

2022-08-17 05:54:19 字數 2424 閱讀 2476

一、有四種方式查詢陣列中是否包含某個值

1、使用list

public static boolean uselist(string arr, string targetvalue)

2、使用set

public static boolean useset(string arr, string targetvalue)

3、使用簡單的迴圈

public static boolean useloop(string arr, string targetvalue) 

return false;

}

4、使用arrays.binarysearch(),但這個方法只接受已經排好序的陣列

public static boolean usearraysbinarysearch(string arr, string targetvalue)

二、計算以上四種方式的時間複雜度

1、測試陣列的元素個數分別為:5 , 1000, 10000

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

}

result:

uselist:  13

useset: 72

useloop: 5

usearraysbinarysearch: 9

use  a  larger  array(1k):

string arr = new string[1000];

random s = new random();

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

result:

uselist:  112

useset: 2055

useloop: 99

usearraybinary: 12

use  a  larger  array(1k):

string arr = new string[10000];

random s = new random();

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

result:

uselist:  1590

useset: 23819

useloop: 1526

usearraybinary: 12

三、總結

從以上結果可以清晰的看出,使用簡單的迴圈比使用集合更高效,很多開發者更多的使用第一種方式,但是第一種方式並不是最高效的,因為使用集合的時候,需要從陣列無序的讀取元素,再儲存到結合中,這個過程非常耗時;

實際上,乙個排序好的list或者tree時間複雜度僅為:o(log(n)),而hashset的效率更高:o(1)

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

public static boolean uselist string arr,string targetvalue public static boolean useset string arr,string targetvalue public static boolean useloop s...

如何高效檢查乙個陣列中是否包含某個值

1.檢查陣列中是否包含特定值的四種不同方法 1 使用list public static boolean uselist string arr,string targetvalue 2 使用set public static boolean useset string arr,string targ...

PHP如何查詢一列有序陣列是否包含某值(二分查詢)

問題 對於一列有序陣列,如何判斷給出的乙個值,該值是否存在於陣列。思路 判斷是否存在,最簡單是,直接迴圈該陣列,對每乙個值進行比較。但是對於有序陣列來說,這樣寫就完全沒有利用好 有序 這一特點。所有我們使用到 二分法查詢 有序陣列為 arr array 2,5,66,87,954,1452,5865...