Java 如何判斷乙個陣列中是否包含某個元素

2021-09-11 21:56:30 字數 3109 閱讀 7694

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;

}

public static boolean usearraysbinarysearch(string arr, string targetvalue) else 

}

注意:arrays.binarysearch()方法只能用於有序陣列!!!

import org.apache.commons.lang3.arrayutils;

public static boolean usearrayutils(string arr, string targetvalue)

其實apache commons類庫中的arrayutils的contains方法的原始碼也是使用迴圈判斷的方式。

if(array == null)  else 

int i;

if(objecttofind == null)

} } else if(array.getclass().getcomponenttype().isinstance(objecttofind))

} }return -1;

}

比較:我們可以通過下面的**大概的得出各種方法的時間成本。基本思想就是從陣列中查詢某個值,陣列的大小分別是5、1k、10k。這種方法得到的結果可能並不精確,但是是最簡單清晰的方式。

public static void main(string args) ;

/*string arr = new string[1000];

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

*/

/* string arr = new string[10000];

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

*/

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

//use usearrayutils

starttime = system.nanotime();

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

endtime = system.nanotime();

duration = endtime - starttime;

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

}

當陣列長度為5時,執行結果如下:

uselist:  4

useset: 48

useloop: 3

usearraybinary: 4

usearrayutils: 16

當陣列長度為1k時,執行結果如下:

uselist:  97

useset: 1312

useloop: 78

usearraybinary: 6

usearrayutils: 97

當陣列長度為10k時,執行結果如下:

uselist:  1213

useset: 11697

useloop: 1165

usearraybinary: 7

usearrayutils: 1272

顯然,使用乙個簡單的迴圈方法比使用任何集合都更加高效。

大多數人為了方便,都使用第一種方法,但是他的效率相對較低。因為將陣列壓入collection型別中,首先要將陣列元素遍歷一遍,然後再使用集合類做其他操作。

如果使用arrays.binarysearch()方法,陣列必須是已排序的。所以當陣列並沒有進行排序,所以該方法不可使用。

判斷乙個陣列是否有序

一般來說,判斷乙個陣列或序列是正序,倒序還是亂序,需要我們將這個陣列完整的遍歷一遍後才能得出答案,它不像折半查詢那樣只處理少量的資料便能得出結論,因為一段包含成千上萬個元素的有序序列,哪怕將其中兩個元素的位置調換都能將這個序列變成亂序序列.如下面這段序列,只是數字8和9調換,就變成了亂序的.0,1,...

java 判斷乙個陣列中的數值是否連續相鄰

判斷乙個陣列中的數值是否連續相鄰 滿足以下條件 1.0是例外可以反覆出現 0可以通配任何字元 2.相同的數值不會重複出現 3.該陣列可以是亂序的 當陣列不含有0時滿足最大值 最小值 n 陣列長度 1 當陣列陣列含有0時.滿足最大值 最小值 所以,當最大值最大值 最小值 n 陣列長度 1時,一定不是連...

判斷乙個陣列是否包含另乙個陣列

function iscontainarr parent,child let parent 1,2,3,6,5,4 let child 1,3,4,6 let child2 1,3,4,6,7 console.log iscontainarr parent,child true console.lo...