<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## binarySearch二分查找 一旦數組被排序,您就可以通過使用 **Arrays.binarySearch()** 來執行對特定項的快速搜索。但是,如果嘗試在未排序的數組上使用 **binarySearch()**,結果是不可預測的。下面的示例使用 **Rand.Pint** 類來創建一個填充隨機整形值的數組,然后調用 **getAsInt()** (因為 **Rand.Pint** 是一個 **IntSupplier**)來產生搜索值: ```JAVA // arrays/ArraySearching.java // Using Arrays.binarySearch() import onjava.*; import java.util.Arrays; import static onjava.ArrayShow.*; public class ArraySearching { public static void main(String[] args) { Rand.Pint rand = new Rand.Pint(); int[] a = new Rand.Pint().array(25); Arrays.sort(a); show("Sorted array", a); while (true) { int r = rand.getAsInt(); int location = Arrays.binarySearch(a, r); if (location >= 0) { System.out.println("Location of " + r + " is " + location + ", a[" + location + "] is " + a[location]); break; // Out of while loop } } } } /* Output: Sorted array: [125, 267, 635, 650, 1131, 1506, 1634, 2400, 2766, 3063, 3768, 3941, 4720, 4762, 4948, 5070, 5682, 5807, 6177, 6193, 6656, 7021, 8479, 8737, 9954] Location of 635 is 2, a[2] is 635 */ ``` 在while循環中,隨機值作為搜索項生成,直到在數組中找到其中一個為止。 如果找到了搜索項,**Arrays.binarySearch()** 將生成一個大于或等于零的值。否則,它將產生一個負值,表示如果手動維護已排序的數組,則應該插入元素的位置。產生的值是 -(插入點) - 1 。插入點是大于鍵的第一個元素的索引,如果數組中的所有元素都小于指定的鍵,則是 **a.size()** 。 如果數組包含重復的元素,則無法保證找到其中的那些重復項。搜索算法不是為了支持重復的元素,而是為了容忍它們。如果需要沒有重復元素的排序列表,可以使用 **TreeSet** (用于維持排序順序)或 **LinkedHashSet** (用于維持插入順序)。這些類自動為您處理所有的細節。只有在出現性能瓶頸的情況下,才應該使用手工維護的數組替換這些類中的一個。 如果使用比較器(原語數組不允許使用比較器進行排序)對對象數組進行排序,那么在執行 **binarySearch()** (使用重載版本的binarySearch())時必須包含相同的比較器。例如,可以修改 **StringSorting.java** 來執行搜索: ```JAVA // arrays/AlphabeticSearch.java // Searching with a Comparator import onjava.*; import java.util.Arrays; import static onjava.ArrayShow.*; public class AlphabeticSearch { public static void main(String[] args) { String[] sa = new Rand.String().array(30); Arrays.sort(sa, String.CASE_INSENSITIVE_ORDER); show(sa); int index = Arrays.binarySearch(sa, sa[10], String.CASE_INSENSITIVE_ORDER); System.out.println("Index: " + index + "\n" + sa[index]); } } /* Output: [anmkkyh, bhmupju, btpenpc, cjwzmmr, cuxszgv, eloztdv, ewcippc, ezdeklu, fcjpthl, fqmlgsh, gmeinne, hyoubzl, jbvlgwc, jlxpqds, ljlbynx, mvducuj, qgekgly, skddcat, taprwxz, uybypgp, vjsszkn, vniyapk, vqqakbm, vwodhcf, ydpulcq, ygpoalk, yskvett, zehpfmm, zofmmvm, zrxmclh] Index: 10 gmeinne */ ``` 比較器必須作為第三個參數傳遞給重載的 **binarySearch()** 。在本例中,成功是有保證的,因為搜索項是從數組本身中選擇的。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看