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...