Java中高效判斷陣列中是否包含某個元素。
如何檢查一個數組(無序的)是否包含一個特定的值呢?這是一個在Java中經常用到的並且非常有用的操作。本文將分析幾種常見用法及其時間成本。
1、使用 ava.util.Arrays.asList(arr).contains(target);
public static boolean useArrays(String[] arr, String target) {
return Arrays.asList(arr).contains(target);
}
2、使用java.util.Set<>().contains() public static boolean useArrays(String[] arr, String target) { return Arrays.asList(arr).contains(target); }
3、使用普通for迴圈遍歷
public static boolean useLoop(String[] arr, String target) {
for (int index = arr.length - 1; index < arr.length; --index) {
if (target.equals(arr[index])) {
return true;
}
}
return false;
}
4、使用增強for迴圈遍歷 public static boolean useAmplifyLoop(String[] arr, String target) { for (String value : arr) { if (value.equals(target)) { return true; } } return false; }
5、使用ArrayUtils(新jdk中的類,模仿原始碼寫了一個); public static int useArrayUtils(String[] arr, String targetValue) { int startIndex = -1; if (arr == null) { return -1; } else { if (startIndex < 0) { startIndex = 0; } int i; if (targetValue == null) { for (i = startIndex; i < arr.length; ++i) { if (arr[i] == null) { return i; } } } else if (arr.getClass().getComponentType() .isInstance(targetValue)) { for (i = startIndex; i < arr.length; ++i) { if (targetValue.equals(arr[i])) { return i; } } } return -1; } }
測試結果如下
public static void main(String[] args) {
boolean flag = false;
String[] arr = new String[100000];
Random s = new Random();
for (int i = 0; i < arr.length; i++) {
arr[i] = String.valueOf(s.nextInt(100000));
}
String contain = "694";
arr[arr.length - 1] = contain;
long start = System.nanoTime();
useArrays(arr, contain);
ResourceKit.executeNaNoTime(start, "useArrays",flag);
start = System.nanoTime();
flag = useSet(arr, contain);
ResourceKit.executeNaNoTime(start, "useSet",flag);
start = System.nanoTime();
flag = useLoop(arr, contain);
ResourceKit.executeNaNoTime(start, "useLoop",flag);
start = System.nanoTime();
flag = useAmplifyLoop(arr, contain);
ResourceKit.executeNaNoTime(start, "useAmplifyLoop",flag);
start = System.nanoTime();
flag = useArrayBinarySearch(arr, contain);
ResourceKit.executeNaNoTime(start, "useArrayBinarySearch",flag);
start = System.nanoTime();
int useArrayUtils = useArrayUtils(arr, contain);
flag = useArrayUtils < 0 ? false : true;
ResourceKit.executeNaNoTime(start, "useArrayUtils",flag);
}
useArrays:23015219 false (該方法好像不能查詢?)有空看看原始碼怎麼實現的。
useSet:34215532 true
useLoop:14590 true
useAmplifyLoop:2742914 true
useArrayUtils:2122015 true
目前會的就這幾種,測試過程中,倒序for迴圈是最快的。
相關推薦
Java中高效判斷陣列中是否包含某個元素。
如何檢查一個數組(無序的)是否包含一個特定的值呢?這是一個在Java中經常用到的並且非常有用的操作。本文將分析幾種常見用法及其時間成本。1、使用 ava.util.Arrays.asList(arr)
在Java中如何高效判斷陣列中是否包含某個元素
如何檢查一個數組(無序)是否包含一個特定的值?這是一個在Java中經常用到的並且非常有用的操作。同時,這個問題在Stack Overflow中也是一個非常熱門的問題。在投票比較高的幾個答案中給出了幾種不同的方法,但是他們的時間複雜度也是各不相同的。本文將分析
java中如何高效判斷陣列中是否包含某個特定的值
四種不同方式檢查陣列是否包含某個值 使用List: public static boolean useList(String[] arr, String targetValue) {
判斷js陣列包是否包含某個元素
要判斷陣列中是否包含某個元素,從原理來來說,就是遍歷整個陣列,然後判斷是否相等,我們來造個輪子,名字就山寨PHP的陣列函式in_array() Array.prototype.in_array = function(e) { for(i=0;i<this.length;
Java中如何高效的判斷陣列中是否包含某個元素
如何檢查一個數組(無序)是否包含一個特定的值?這是一個在Java中經常用到的並且非常有用的操作。同時,這個問題在Stack Overflow中也是一個非常熱門的問題。在投票比較高的幾個答案中給出了幾種不同的方法,但是他們的時間複雜度也是各不相同的。本文將分析幾種常見用法
java中如何高效的判斷陣列中是否包含某個元素---
package zaLearnpackage; import org.apache.commons.lang3.ArrayUtils; import java.util.Arrays; import java.util.HashSet; import java.uti
在Java中如何高效判斷數組中是否包含某個元素
clas AC ray 而且 一個 nan 使用 一個數 component 如何檢查一個數組(無序)是否包含一個特定的值?這是一個在Java中經常用到的並且非常有用的操作。同時,這個問題在Stack Overflow中也是一個非常熱門的問題。在投票比較高的幾個答案中給出了
java如何判斷陣列中是否包含某元素
有兩種方法可以判斷陣列是否包含元素: 方法1, 將陣列轉換為list,然後使用list的contains方法來判斷: Arrays.asList(...).contains(...) 方法2,遍歷陣列判斷: publicstatic<T>boolean c
Query判斷陣列中是否包含某個元素
JQuery判斷陣列中是否包含某個元素使用$.inArray("js", arr); var arr = [ "xml", "html", "css", "js" ]; $.in
獲取表格中列值時,空格符也會加進去,導致判斷陣列中是否包含列值時會返回false
//初始化已選優惠券編碼 var discountTbody=document.getElementById('discountTbody'); var discountRows=discountTbody.rows; var selectCouponList=[]; console.l
判斷陣列中是否包含某元素,判斷字串中是否包含某字串
let arr = [1, 2, 3, 4]; if (arr.indexOf('1') > -1) {} //判斷1是否在陣列arr中,true=是 let str = string; if (str.indexOf('t') !== -1) {}&nb
node js 判斷陣列中是否包含某個值
判斷陣列中是否包含某個值這裡有四種方法。 用的測試資料: let arr=["a","b","c"]; let arr2={"a":"aaa","b":"bbb","c":"ccc"}; in判斷是否在陣列的key裡 in操作符針對的是key,而非value。而對於普通的一
判斷陣列中是否包含某個物件
要想比較需要重寫-isEqual:和-hash 當判斷anObject是否在當前的NSArray中的時候,是通過呼叫isEqual:這個方法來判斷的,isEqual:本質是在比較兩個物件的hash值 @interface Person @property NSStrin
java 劍指offer 第一題:在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
我用了三種解法,全部都可以在牛客網上通過。 第一種解法是最簡單的,遍歷整個二維陣列找那個整數; 第二種和第三種都是根據二維陣列有序的特性進行查詢,第二種方法是從左下角開始查詢,大於左下角刪除一行,小於左下角刪除一列;第三種是從右上角開始查詢,大於右上角刪除一行,小於右上角的
Java 一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。判斷陣列中是否含有某個整數。
開始刷牛客題目:思路:題目已知:二維陣列由上到下,由左到右遞增的規律,那麼選取右上角(或者左下角)的元素a[row][col]與target進行比較,當target小於元素a[row][col]時,那麼target必定在元素a所在行的左邊,即col--;當target大於元素
java實現一個二維陣列,每一行從左到右遞增,每一列從上到下遞增,輸入一個二維陣列和一個整數,判斷陣列中是否有該整數
/** * 給定二維陣列,尋找key值 */public class FindKey { public static boolean findKey(int[][] arr,int key) { if (arr == null) {
判斷陣列中是否包含重複數字
給定一個長度為N的陣列,其中每個元素的取值範圍都是1到N。判斷陣列中是否有重複的數字。(原陣列不必保留) 方法1.對陣列進行排序(快速,堆),然後比較相鄰的元素是否相同。時間複雜度為O(nlogn),空間複雜度為O(1)。方法2.使用bitmap方法。定義長度為N/8的ch
遞迴方法判斷陣列中的元素是否有序(Java實現)
import java.util.Scanner; class IsSort { public int isArrayInSortedOrder(int[] a, int index) { if (index == 1) {
java去除兩個陣列中相同的元素
import java.util.*; /** * 陣列去重 * <p> * Created by Cheung on 2016/4/14. */ public class Test01 { public static void main(String[] args)
劍指offer——判斷陣列中出現次數過半的數值
根據題目,主要解決兩個問題,一個是判斷出現陣列出現的次數,二是輸出出現次數過半的數值,無則返回0。根據這種情況,腦中第一個出現的就是用字典解決,判斷value,輸出key。 class Solution: def MoreThanHlafNum_Solution(self,number