1. 程式人生 > >Java中高效判斷陣列中是否包含某個元素。

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