<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. java語言

    Java數組特定值高效判斷方法

    時間:2025-05-28 23:06:54 java語言 我要投稿
    • 相關推薦

    Java數組特定值高效判斷方法

      如何檢查一個數組(無序)是否包含一個特定的值?這是一個在Java中經常用到的并且非常有用的操作。同時,這個問題在Stack Overflow中也是一個非常熱門的問題。在投票比較高的幾個答案中給出了幾種不同的方法,但是他們的時間復雜度也是各不相同的。以下僅供參考!

      檢查數組是否包含某個值的方法

      使用List

      public static boolean useList(String[] arr, String targetValue) {

      return Arrays.asList(arr).contains(targetValue);

      }

      使用Set

      public static boolean useSet(String[] arr, String targetValue) {

      Setset = new HashSet(Arrays.asList(arr));

      return set.contains(targetValue);

      }

      使用循環判斷

      public static boolean useLoop(String[] arr, String targetValue) {

      for(String s: arr){

      if(s.equals(targetValue))

      return true;

      }

      return false;

      }

      使用Arrays.binarySearch()

      Arrays.binarySearch()方法只能用于有序數組!!!如果數組無序的話得到的結果就會很奇怪。

      查找有序數組中是否包含某個值的用法如下:

      public static boolean useArraysBinarySearch(String[] arr, String targetValue) {

      int a = Arrays.binarySearch(arr, targetValue);

      if(a > 0)

      return true;

      else

      return false;

      }

      時間復雜度

      下面的代碼可以大概的得出各種方法的時間成本。基本思想就是從數組中查找某個值,數組的大小分別是5、1k、10k。這種方法得到的結果可能并不精確,但是最簡單清晰的方式。

      public static void main(String[] args) {

      String[] arr = new String[] { "CD", "BC", "EF", "DE", "AB"};

      //use list

      long startTime = System.nanoTime();

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

      useList(arr, "A");

      }

      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++) {

      useSet(arr, "A");

      }

      endTime = System.nanoTime();

      duration = endTime - startTime;

      System.out.println("useSet: " + duration / 1000000);

      //use loop

      startTime = System.nanoTime();

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

      useLoop(arr, "A");

      }

      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++) {

      useArraysBinarySearch(arr, "A");

      }

      endTime = System.nanoTime();

      duration = endTime - startTime;

      System.out.println("useArrayBinary: " + duration / 1000000);

      }

      運行結果:

      useList: 13

      useSet: 72

      useLoop: 5

      useArraysBinarySearch: 9

      使用一個長度為1k的數組

      String[] arr = new String[1000];

      Random s = new Random();

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

      arr[i] = String.valueOf(s.nextInt());

      }

      結果:

      useList: 112

      useSet: 2055

      useLoop: 99

      useArrayBinary: 12

      使用一個長度為10k的數組

      String[] arr = new String[10000];

      Random s = new Random();

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

      arr[i] = String.valueOf(s.nextInt());

      }

      結果:

      useList: 1590

      useSet: 23819

      useLoop: 1526

      useArrayBinary: 12

      總結

      顯然,使用一個簡單的循環方法比使用任何集合都更加高效。許多開發人員為了方便,都使用第一種方法,但是他的效率也相對較低。因為將數組壓入Collection類型中,首先要將數組元素遍歷一遍,然后再使用集合類做其他操作。

      如果使用Arrays.binarySearch()方法,數組必須是已排序的。由于上面的數組并沒有進行排序,所以該方法不可使用。

      實際上,如果你需要借助數組或者集合類高效地檢查數組中是否包含特定值,一個已排序的列表或樹可以做到時間復雜度為O(log(n)),hashset可以達到O(1)。

    【Java數組特定值高效判斷方法】相關文章:

    Java數組操作的方法11-09

    java傳值的方法06-24

    PHP多維數組去掉重復值的方法08-04

    Java數組的基本操作方法介紹08-14

    Java基礎語法的數組使用方法09-11

    Java數組操作的10大方法07-09

    Java數組的使用07-14

    java數組增刪改查操作方法08-18

    Java中數組的特性09-18

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人