jdk/src/java.base/share/classes/java/util/Arrays.java
changeset 35255 6f0bf592d149
parent 33843 8fdd836f35bc
child 37685 6045bfdd65a5
equal deleted inserted replaced
35254:ba6a26f39b86 35255:6f0bf592d149
   108 
   108 
   109     /**
   109     /**
   110      * Checks that {@code fromIndex} and {@code toIndex} are in
   110      * Checks that {@code fromIndex} and {@code toIndex} are in
   111      * the range and throws an exception if they aren't.
   111      * the range and throws an exception if they aren't.
   112      */
   112      */
   113     private static void rangeCheck(int arrayLength, int fromIndex, int toIndex) {
   113     static void rangeCheck(int arrayLength, int fromIndex, int toIndex) {
   114         if (fromIndex > toIndex) {
   114         if (fromIndex > toIndex) {
   115             throw new IllegalArgumentException(
   115             throw new IllegalArgumentException(
   116                     "fromIndex(" + fromIndex + ") > toIndex(" + toIndex + ")");
   116                     "fromIndex(" + fromIndex + ") > toIndex(" + toIndex + ")");
   117         }
   117         }
   118         if (fromIndex < 0) {
   118         if (fromIndex < 0) {
  2577 
  2577 
  2578         int length = a.length;
  2578         int length = a.length;
  2579         if (a2.length != length)
  2579         if (a2.length != length)
  2580             return false;
  2580             return false;
  2581 
  2581 
  2582         for (int i=0; i<length; i++)
  2582         return ArraysSupport.mismatch(a, a2, length) < 0;
  2583             if (a[i] != a2[i])
       
  2584                 return false;
       
  2585 
       
  2586         return true;
       
  2587     }
  2583     }
  2588 
  2584 
  2589     /**
  2585     /**
  2590      * Returns true if the two specified arrays of longs, over the specified
  2586      * Returns true if the two specified arrays of longs, over the specified
  2591      * ranges, are <i>equal</i> to one another.
  2587      * ranges, are <i>equal</i> to one another.
  2626         int aLength = aToIndex - aFromIndex;
  2622         int aLength = aToIndex - aFromIndex;
  2627         int bLength = bToIndex - bFromIndex;
  2623         int bLength = bToIndex - bFromIndex;
  2628         if (aLength != bLength)
  2624         if (aLength != bLength)
  2629             return false;
  2625             return false;
  2630 
  2626 
  2631         for (int i = 0; i < aLength; i++)
  2627         return ArraysSupport.mismatch(a, aFromIndex,
  2632             if (a[aFromIndex++] != b[bFromIndex++])
  2628                                       b, bFromIndex,
  2633                 return false;
  2629                                       aLength) < 0;
  2634 
       
  2635         return true;
       
  2636     }
  2630     }
  2637 
  2631 
  2638     /**
  2632     /**
  2639      * Returns {@code true} if the two specified arrays of ints are
  2633      * Returns {@code true} if the two specified arrays of ints are
  2640      * <i>equal</i> to one another.  Two arrays are considered equal if both
  2634      * <i>equal</i> to one another.  Two arrays are considered equal if both
  2655 
  2649 
  2656         int length = a.length;
  2650         int length = a.length;
  2657         if (a2.length != length)
  2651         if (a2.length != length)
  2658             return false;
  2652             return false;
  2659 
  2653 
  2660         for (int i=0; i<length; i++)
  2654         return ArraysSupport.mismatch(a, a2, length) < 0;
  2661             if (a[i] != a2[i])
       
  2662                 return false;
       
  2663 
       
  2664         return true;
       
  2665     }
  2655     }
  2666 
  2656 
  2667     /**
  2657     /**
  2668      * Returns true if the two specified arrays of ints, over the specified
  2658      * Returns true if the two specified arrays of ints, over the specified
  2669      * ranges, are <i>equal</i> to one another.
  2659      * ranges, are <i>equal</i> to one another.
  2704         int aLength = aToIndex - aFromIndex;
  2694         int aLength = aToIndex - aFromIndex;
  2705         int bLength = bToIndex - bFromIndex;
  2695         int bLength = bToIndex - bFromIndex;
  2706         if (aLength != bLength)
  2696         if (aLength != bLength)
  2707             return false;
  2697             return false;
  2708 
  2698 
  2709         for (int i = 0; i < aLength; i++)
  2699         return ArraysSupport.mismatch(a, aFromIndex,
  2710             if (a[aFromIndex++] != b[bFromIndex++])
  2700                                       b, bFromIndex,
  2711                 return false;
  2701                                       aLength) < 0;
  2712 
       
  2713         return true;
       
  2714     }
  2702     }
  2715 
  2703 
  2716     /**
  2704     /**
  2717      * Returns {@code true} if the two specified arrays of shorts are
  2705      * Returns {@code true} if the two specified arrays of shorts are
  2718      * <i>equal</i> to one another.  Two arrays are considered equal if both
  2706      * <i>equal</i> to one another.  Two arrays are considered equal if both
  2733 
  2721 
  2734         int length = a.length;
  2722         int length = a.length;
  2735         if (a2.length != length)
  2723         if (a2.length != length)
  2736             return false;
  2724             return false;
  2737 
  2725 
  2738         for (int i=0; i<length; i++)
  2726         return ArraysSupport.mismatch(a, a2, length) < 0;
  2739             if (a[i] != a2[i])
       
  2740                 return false;
       
  2741 
       
  2742         return true;
       
  2743     }
  2727     }
  2744 
  2728 
  2745     /**
  2729     /**
  2746      * Returns true if the two specified arrays of shorts, over the specified
  2730      * Returns true if the two specified arrays of shorts, over the specified
  2747      * ranges, are <i>equal</i> to one another.
  2731      * ranges, are <i>equal</i> to one another.
  2782         int aLength = aToIndex - aFromIndex;
  2766         int aLength = aToIndex - aFromIndex;
  2783         int bLength = bToIndex - bFromIndex;
  2767         int bLength = bToIndex - bFromIndex;
  2784         if (aLength != bLength)
  2768         if (aLength != bLength)
  2785             return false;
  2769             return false;
  2786 
  2770 
  2787         for (int i = 0; i < aLength; i++)
  2771         return ArraysSupport.mismatch(a, aFromIndex,
  2788             if (a[aFromIndex++] != b[bFromIndex++])
  2772                                       b, bFromIndex,
  2789                 return false;
  2773                                       aLength) < 0;
  2790 
       
  2791         return true;
       
  2792     }
  2774     }
  2793 
  2775 
  2794     /**
  2776     /**
  2795      * Returns {@code true} if the two specified arrays of chars are
  2777      * Returns {@code true} if the two specified arrays of chars are
  2796      * <i>equal</i> to one another.  Two arrays are considered equal if both
  2778      * <i>equal</i> to one another.  Two arrays are considered equal if both
  2812 
  2794 
  2813         int length = a.length;
  2795         int length = a.length;
  2814         if (a2.length != length)
  2796         if (a2.length != length)
  2815             return false;
  2797             return false;
  2816 
  2798 
  2817         for (int i=0; i<length; i++)
  2799         return ArraysSupport.mismatch(a, a2, length) < 0;
  2818             if (a[i] != a2[i])
       
  2819                 return false;
       
  2820 
       
  2821         return true;
       
  2822     }
  2800     }
  2823 
  2801 
  2824     /**
  2802     /**
  2825      * Returns true if the two specified arrays of chars, over the specified
  2803      * Returns true if the two specified arrays of chars, over the specified
  2826      * ranges, are <i>equal</i> to one another.
  2804      * ranges, are <i>equal</i> to one another.
  2861         int aLength = aToIndex - aFromIndex;
  2839         int aLength = aToIndex - aFromIndex;
  2862         int bLength = bToIndex - bFromIndex;
  2840         int bLength = bToIndex - bFromIndex;
  2863         if (aLength != bLength)
  2841         if (aLength != bLength)
  2864             return false;
  2842             return false;
  2865 
  2843 
  2866         for (int i = 0; i < aLength; i++)
  2844         return ArraysSupport.mismatch(a, aFromIndex,
  2867             if (a[aFromIndex++] != b[bFromIndex++])
  2845                                       b, bFromIndex,
  2868                 return false;
  2846                                       aLength) < 0;
  2869 
       
  2870         return true;
       
  2871     }
  2847     }
  2872 
  2848 
  2873     /**
  2849     /**
  2874      * Returns {@code true} if the two specified arrays of bytes are
  2850      * Returns {@code true} if the two specified arrays of bytes are
  2875      * <i>equal</i> to one another.  Two arrays are considered equal if both
  2851      * <i>equal</i> to one another.  Two arrays are considered equal if both
  2891 
  2867 
  2892         int length = a.length;
  2868         int length = a.length;
  2893         if (a2.length != length)
  2869         if (a2.length != length)
  2894             return false;
  2870             return false;
  2895 
  2871 
  2896         for (int i=0; i<length; i++)
  2872         return ArraysSupport.mismatch(a, a2, length) < 0;
  2897             if (a[i] != a2[i])
       
  2898                 return false;
       
  2899 
       
  2900         return true;
       
  2901     }
  2873     }
  2902 
  2874 
  2903     /**
  2875     /**
  2904      * Returns true if the two specified arrays of bytes, over the specified
  2876      * Returns true if the two specified arrays of bytes, over the specified
  2905      * ranges, are <i>equal</i> to one another.
  2877      * ranges, are <i>equal</i> to one another.
  2940         int aLength = aToIndex - aFromIndex;
  2912         int aLength = aToIndex - aFromIndex;
  2941         int bLength = bToIndex - bFromIndex;
  2913         int bLength = bToIndex - bFromIndex;
  2942         if (aLength != bLength)
  2914         if (aLength != bLength)
  2943             return false;
  2915             return false;
  2944 
  2916 
  2945         for (int i = 0; i < aLength; i++)
  2917         return ArraysSupport.mismatch(a, aFromIndex,
  2946             if (a[aFromIndex++] != b[bFromIndex++])
  2918                                       b, bFromIndex,
  2947                 return false;
  2919                                       aLength) < 0;
  2948 
       
  2949         return true;
       
  2950     }
  2920     }
  2951 
  2921 
  2952     /**
  2922     /**
  2953      * Returns {@code true} if the two specified arrays of booleans are
  2923      * Returns {@code true} if the two specified arrays of booleans are
  2954      * <i>equal</i> to one another.  Two arrays are considered equal if both
  2924      * <i>equal</i> to one another.  Two arrays are considered equal if both
  2969 
  2939 
  2970         int length = a.length;
  2940         int length = a.length;
  2971         if (a2.length != length)
  2941         if (a2.length != length)
  2972             return false;
  2942             return false;
  2973 
  2943 
  2974         for (int i=0; i<length; i++)
  2944         return ArraysSupport.mismatch(a, a2, length) < 0;
  2975             if (a[i] != a2[i])
       
  2976                 return false;
       
  2977 
       
  2978         return true;
       
  2979     }
  2945     }
  2980 
  2946 
  2981     /**
  2947     /**
  2982      * Returns true if the two specified arrays of booleans, over the specified
  2948      * Returns true if the two specified arrays of booleans, over the specified
  2983      * ranges, are <i>equal</i> to one another.
  2949      * ranges, are <i>equal</i> to one another.
  3018         int aLength = aToIndex - aFromIndex;
  2984         int aLength = aToIndex - aFromIndex;
  3019         int bLength = bToIndex - bFromIndex;
  2985         int bLength = bToIndex - bFromIndex;
  3020         if (aLength != bLength)
  2986         if (aLength != bLength)
  3021             return false;
  2987             return false;
  3022 
  2988 
  3023         for (int i = 0; i < aLength; i++)
  2989         return ArraysSupport.mismatch(a, aFromIndex,
  3024             if (a[aFromIndex++] != b[bFromIndex++])
  2990                                       b, bFromIndex,
  3025                 return false;
  2991                                       aLength) < 0;
  3026 
       
  3027         return true;
       
  3028     }
  2992     }
  3029 
  2993 
  3030     /**
  2994     /**
  3031      * Returns {@code true} if the two specified arrays of doubles are
  2995      * Returns {@code true} if the two specified arrays of doubles are
  3032      * <i>equal</i> to one another.  Two arrays are considered equal if both
  2996      * <i>equal</i> to one another.  Two arrays are considered equal if both
  3053 
  3017 
  3054         int length = a.length;
  3018         int length = a.length;
  3055         if (a2.length != length)
  3019         if (a2.length != length)
  3056             return false;
  3020             return false;
  3057 
  3021 
  3058         for (int i=0; i<length; i++) {
  3022         return ArraysSupport.mismatch(a, a2, length) < 0;
  3059             double v1 = a[i], v2 = a2[i];
       
  3060             if (Double.doubleToRawLongBits(v1) != Double.doubleToRawLongBits(v2))
       
  3061                 if (!Double.isNaN(v1) || !Double.isNaN(v2))
       
  3062                     return false;
       
  3063         }
       
  3064 
       
  3065         return true;
       
  3066     }
  3023     }
  3067 
  3024 
  3068     /**
  3025     /**
  3069      * Returns true if the two specified arrays of doubles, over the specified
  3026      * Returns true if the two specified arrays of doubles, over the specified
  3070      * ranges, are <i>equal</i> to one another.
  3027      * ranges, are <i>equal</i> to one another.
  3111         int aLength = aToIndex - aFromIndex;
  3068         int aLength = aToIndex - aFromIndex;
  3112         int bLength = bToIndex - bFromIndex;
  3069         int bLength = bToIndex - bFromIndex;
  3113         if (aLength != bLength)
  3070         if (aLength != bLength)
  3114             return false;
  3071             return false;
  3115 
  3072 
  3116         for (int i = 0; i < aLength; i++) {
  3073         return ArraysSupport.mismatch(a, aFromIndex,
  3117             Double va = a[aFromIndex++], vb = b[bFromIndex++];
  3074                                       b, bFromIndex, aLength) < 0;
  3118             if (Double.doubleToRawLongBits(va) != Double.doubleToRawLongBits(vb))
       
  3119                 if (!Double.isNaN(va) || !Double.isNaN(vb))
       
  3120                     return false;
       
  3121         }
       
  3122 
       
  3123         return true;
       
  3124     }
  3075     }
  3125 
  3076 
  3126     /**
  3077     /**
  3127      * Returns {@code true} if the two specified arrays of floats are
  3078      * Returns {@code true} if the two specified arrays of floats are
  3128      * <i>equal</i> to one another.  Two arrays are considered equal if both
  3079      * <i>equal</i> to one another.  Two arrays are considered equal if both
  3149 
  3100 
  3150         int length = a.length;
  3101         int length = a.length;
  3151         if (a2.length != length)
  3102         if (a2.length != length)
  3152             return false;
  3103             return false;
  3153 
  3104 
  3154         for (int i=0; i<length; i++) {
  3105         return ArraysSupport.mismatch(a, a2, length) < 0;
  3155             float v1 = a[i], v2 = a2[i];
       
  3156             if (Float.floatToRawIntBits(v1) != Float.floatToRawIntBits(v2))
       
  3157                 if (!Float.isNaN(v1) || !Float.isNaN(v2))
       
  3158                     return false;
       
  3159         }
       
  3160 
       
  3161         return true;
       
  3162     }
  3106     }
  3163 
  3107 
  3164     /**
  3108     /**
  3165      * Returns true if the two specified arrays of floats, over the specified
  3109      * Returns true if the two specified arrays of floats, over the specified
  3166      * ranges, are <i>equal</i> to one another.
  3110      * ranges, are <i>equal</i> to one another.
  3207         int aLength = aToIndex - aFromIndex;
  3151         int aLength = aToIndex - aFromIndex;
  3208         int bLength = bToIndex - bFromIndex;
  3152         int bLength = bToIndex - bFromIndex;
  3209         if (aLength != bLength)
  3153         if (aLength != bLength)
  3210             return false;
  3154             return false;
  3211 
  3155 
  3212         for (int i = 0; i < aLength; i++) {
  3156         return ArraysSupport.mismatch(a, aFromIndex,
  3213             float va = a[aFromIndex++], vb = b[bFromIndex++];
  3157                                       b, bFromIndex, aLength) < 0;
  3214             if (Float.floatToRawIntBits(va) != Float.floatToRawIntBits(vb))
       
  3215                 if (!Float.isNaN(va) || !Float.isNaN(vb))
       
  3216                     return false;
       
  3217         }
       
  3218 
       
  3219         return true;
       
  3220     }
  3158     }
  3221 
  3159 
  3222     /**
  3160     /**
  3223      * Returns {@code true} if the two specified arrays of Objects are
  3161      * Returns {@code true} if the two specified arrays of Objects are
  3224      * <i>equal</i> to one another.  The two arrays are considered equal if
  3162      * <i>equal</i> to one another.  The two arrays are considered equal if
  5802         if (a == b)
  5740         if (a == b)
  5803             return 0;
  5741             return 0;
  5804         if (a == null || b == null)
  5742         if (a == null || b == null)
  5805             return a == null ? -1 : 1;
  5743             return a == null ? -1 : 1;
  5806 
  5744 
  5807         int length = Math.min(a.length, b.length);
  5745         int i = ArraysSupport.mismatch(a, b,
  5808         for (int i = 0; i < length; i++) {
  5746                                        Math.min(a.length, b.length));
  5809             if (a[i] != b[i]) return Boolean.compare(a[i], b[i]);
  5747         if (i >= 0) {
       
  5748             return Boolean.compare(a[i], b[i]);
  5810         }
  5749         }
  5811 
  5750 
  5812         return a.length - b.length;
  5751         return a.length - b.length;
  5813     }
  5752     }
  5814 
  5753 
  5878         rangeCheck(a.length, aFromIndex, aToIndex);
  5817         rangeCheck(a.length, aFromIndex, aToIndex);
  5879         rangeCheck(b.length, bFromIndex, bToIndex);
  5818         rangeCheck(b.length, bFromIndex, bToIndex);
  5880 
  5819 
  5881         int aLength = aToIndex - aFromIndex;
  5820         int aLength = aToIndex - aFromIndex;
  5882         int bLength = bToIndex - bFromIndex;
  5821         int bLength = bToIndex - bFromIndex;
  5883         int length = Math.min(aLength, bLength);
  5822         int i = ArraysSupport.mismatch(a, aFromIndex,
  5884         for (int i = 0; i < length; i++) {
  5823                                        b, bFromIndex,
  5885             boolean va = a[aFromIndex++];
  5824                                        Math.min(aLength, bLength));
  5886             boolean vb = b[bFromIndex++];
  5825         if (i >= 0) {
  5887             if (va != vb) return Boolean.compare(va, vb);
  5826             return Boolean.compare(a[aFromIndex + i], b[bFromIndex + i]);
  5888         }
  5827         }
  5889 
  5828 
  5890         return aLength - bLength;
  5829         return aLength - bLength;
  5891     }
  5830     }
  5892 
  5831 
  5937         if (a == b)
  5876         if (a == b)
  5938             return 0;
  5877             return 0;
  5939         if (a == null || b == null)
  5878         if (a == null || b == null)
  5940             return a == null ? -1 : 1;
  5879             return a == null ? -1 : 1;
  5941 
  5880 
  5942         int length = Math.min(a.length, b.length);
  5881         int i = ArraysSupport.mismatch(a, b,
  5943         for (int i = 0; i < length; i++) {
  5882                                        Math.min(a.length, b.length));
  5944             if (a[i] != b[i]) return Byte.compare(a[i], b[i]);
  5883         if (i >= 0) {
       
  5884             return Byte.compare(a[i], b[i]);
  5945         }
  5885         }
  5946 
  5886 
  5947         return a.length - b.length;
  5887         return a.length - b.length;
  5948     }
  5888     }
  5949 
  5889 
  6012         rangeCheck(a.length, aFromIndex, aToIndex);
  5952         rangeCheck(a.length, aFromIndex, aToIndex);
  6013         rangeCheck(b.length, bFromIndex, bToIndex);
  5953         rangeCheck(b.length, bFromIndex, bToIndex);
  6014 
  5954 
  6015         int aLength = aToIndex - aFromIndex;
  5955         int aLength = aToIndex - aFromIndex;
  6016         int bLength = bToIndex - bFromIndex;
  5956         int bLength = bToIndex - bFromIndex;
  6017         int length = Math.min(aLength, bLength);
  5957         int i = ArraysSupport.mismatch(a, aFromIndex,
  6018         for (int i = 0; i < length; i++) {
  5958                                        b, bFromIndex,
  6019             byte va = a[aFromIndex++];
  5959                                        Math.min(aLength, bLength));
  6020             byte vb = b[bFromIndex++];
  5960         if (i >= 0) {
  6021             if (va != vb) return Byte.compare(va, vb);
  5961             return Byte.compare(a[aFromIndex + i], b[bFromIndex + i]);
  6022         }
  5962         }
  6023 
  5963 
  6024         return aLength - bLength;
  5964         return aLength - bLength;
  6025     }
  5965     }
  6026 
  5966 
  6064         if (a == b)
  6004         if (a == b)
  6065             return 0;
  6005             return 0;
  6066         if (a == null || b == null)
  6006         if (a == null || b == null)
  6067             return a == null ? -1 : 1;
  6007             return a == null ? -1 : 1;
  6068 
  6008 
  6069         int length = Math.min(a.length, b.length);
  6009         int i = ArraysSupport.mismatch(a, b,
  6070         for (int i = 0; i < length; i++) {
  6010                                        Math.min(a.length, b.length));
  6071             if (a[i] != b[i]) return Byte.compareUnsigned(a[i], b[i]);
  6011         if (i >= 0) {
       
  6012             return Byte.compareUnsigned(a[i], b[i]);
  6072         }
  6013         }
  6073 
  6014 
  6074         return a.length - b.length;
  6015         return a.length - b.length;
  6075     }
  6016     }
  6076 
  6017 
  6131         rangeCheck(a.length, aFromIndex, aToIndex);
  6072         rangeCheck(a.length, aFromIndex, aToIndex);
  6132         rangeCheck(b.length, bFromIndex, bToIndex);
  6073         rangeCheck(b.length, bFromIndex, bToIndex);
  6133 
  6074 
  6134         int aLength = aToIndex - aFromIndex;
  6075         int aLength = aToIndex - aFromIndex;
  6135         int bLength = bToIndex - bFromIndex;
  6076         int bLength = bToIndex - bFromIndex;
  6136         int length = Math.min(aLength, bLength);
  6077         int i = ArraysSupport.mismatch(a, aFromIndex,
  6137         for (int i = 0; i < length; i++) {
  6078                                        b, bFromIndex,
  6138             byte va = a[aFromIndex++];
  6079                                        Math.min(aLength, bLength));
  6139             byte vb = b[bFromIndex++];
  6080         if (i >= 0) {
  6140             if (va != vb) return Byte.compareUnsigned(va, vb);
  6081             return Byte.compareUnsigned(a[aFromIndex + i], b[bFromIndex + i]);
  6141         }
  6082         }
  6142 
  6083 
  6143         return aLength - bLength;
  6084         return aLength - bLength;
  6144     }
  6085     }
  6145 
  6086 
  6190         if (a == b)
  6131         if (a == b)
  6191             return 0;
  6132             return 0;
  6192         if (a == null || b == null)
  6133         if (a == null || b == null)
  6193             return a == null ? -1 : 1;
  6134             return a == null ? -1 : 1;
  6194 
  6135 
  6195         int length = Math.min(a.length, b.length);
  6136         int i = ArraysSupport.mismatch(a, b,
  6196         for (int i = 0; i < length; i++) {
  6137                                        Math.min(a.length, b.length));
  6197             if (a[i] != b[i]) return Short.compare(a[i], b[i]);
  6138         if (i >= 0) {
       
  6139             return Short.compare(a[i], b[i]);
  6198         }
  6140         }
  6199 
  6141 
  6200         return a.length - b.length;
  6142         return a.length - b.length;
  6201     }
  6143     }
  6202 
  6144 
  6265         rangeCheck(a.length, aFromIndex, aToIndex);
  6207         rangeCheck(a.length, aFromIndex, aToIndex);
  6266         rangeCheck(b.length, bFromIndex, bToIndex);
  6208         rangeCheck(b.length, bFromIndex, bToIndex);
  6267 
  6209 
  6268         int aLength = aToIndex - aFromIndex;
  6210         int aLength = aToIndex - aFromIndex;
  6269         int bLength = bToIndex - bFromIndex;
  6211         int bLength = bToIndex - bFromIndex;
  6270         int length = Math.min(aLength, bLength);
  6212         int i = ArraysSupport.mismatch(a, aFromIndex,
  6271         for (int i = 0; i < length; i++) {
  6213                                        b, bFromIndex,
  6272             short va = a[aFromIndex++];
  6214                                        Math.min(aLength, bLength));
  6273             short vb = b[bFromIndex++];
  6215         if (i >= 0) {
  6274             if (va != vb) return Short.compare(va, vb);
  6216             return Short.compare(a[aFromIndex + i], b[bFromIndex + i]);
  6275         }
  6217         }
  6276 
  6218 
  6277         return aLength - bLength;
  6219         return aLength - bLength;
  6278     }
  6220     }
  6279 
  6221 
  6317         if (a == b)
  6259         if (a == b)
  6318             return 0;
  6260             return 0;
  6319         if (a == null || b == null)
  6261         if (a == null || b == null)
  6320             return a == null ? -1 : 1;
  6262             return a == null ? -1 : 1;
  6321 
  6263 
  6322         int length = Math.min(a.length, b.length);
  6264         int i = ArraysSupport.mismatch(a, b,
  6323         for (int i = 0; i < length; i++) {
  6265                                        Math.min(a.length, b.length));
  6324             if (a[i] != b[i]) return Short.compareUnsigned(a[i], b[i]);
  6266         if (i >= 0) {
       
  6267             return Short.compareUnsigned(a[i], b[i]);
  6325         }
  6268         }
  6326 
  6269 
  6327         return a.length - b.length;
  6270         return a.length - b.length;
  6328     }
  6271     }
  6329 
  6272 
  6383         rangeCheck(a.length, aFromIndex, aToIndex);
  6326         rangeCheck(a.length, aFromIndex, aToIndex);
  6384         rangeCheck(b.length, bFromIndex, bToIndex);
  6327         rangeCheck(b.length, bFromIndex, bToIndex);
  6385 
  6328 
  6386         int aLength = aToIndex - aFromIndex;
  6329         int aLength = aToIndex - aFromIndex;
  6387         int bLength = bToIndex - bFromIndex;
  6330         int bLength = bToIndex - bFromIndex;
  6388         int length = Math.min(aLength, bLength);
  6331         int i = ArraysSupport.mismatch(a, aFromIndex,
  6389         for (int i = 0; i < length; i++) {
  6332                                        b, bFromIndex,
  6390             short va = a[aFromIndex++];
  6333                                        Math.min(aLength, bLength));
  6391             short vb = b[bFromIndex++];
  6334         if (i >= 0) {
  6392             if (va != vb) return Short.compareUnsigned(va, vb);
  6335             return Short.compareUnsigned(a[aFromIndex + i], b[bFromIndex + i]);
  6393         }
  6336         }
  6394 
  6337 
  6395         return aLength - bLength;
  6338         return aLength - bLength;
  6396     }
  6339     }
  6397 
  6340 
  6442         if (a == b)
  6385         if (a == b)
  6443             return 0;
  6386             return 0;
  6444         if (a == null || b == null)
  6387         if (a == null || b == null)
  6445             return a == null ? -1 : 1;
  6388             return a == null ? -1 : 1;
  6446 
  6389 
  6447         int length = Math.min(a.length, b.length);
  6390         int i = ArraysSupport.mismatch(a, b,
  6448         for (int i = 0; i < length; i++) {
  6391                                        Math.min(a.length, b.length));
  6449             if (a[i] != b[i]) return Character.compare(a[i], b[i]);
  6392         if (i >= 0) {
       
  6393             return Character.compare(a[i], b[i]);
  6450         }
  6394         }
  6451 
  6395 
  6452         return a.length - b.length;
  6396         return a.length - b.length;
  6453     }
  6397     }
  6454 
  6398 
  6517         rangeCheck(a.length, aFromIndex, aToIndex);
  6461         rangeCheck(a.length, aFromIndex, aToIndex);
  6518         rangeCheck(b.length, bFromIndex, bToIndex);
  6462         rangeCheck(b.length, bFromIndex, bToIndex);
  6519 
  6463 
  6520         int aLength = aToIndex - aFromIndex;
  6464         int aLength = aToIndex - aFromIndex;
  6521         int bLength = bToIndex - bFromIndex;
  6465         int bLength = bToIndex - bFromIndex;
  6522         int length = Math.min(aLength, bLength);
  6466         int i = ArraysSupport.mismatch(a, aFromIndex,
  6523         for (int i = 0; i < length; i++) {
  6467                                        b, bFromIndex,
  6524             char va = a[aFromIndex++];
  6468                                        Math.min(aLength, bLength));
  6525             char vb = b[bFromIndex++];
  6469         if (i >= 0) {
  6526             if (va != vb) return Character.compare(va, vb);
  6470             return Character.compare(a[aFromIndex + i], b[bFromIndex + i]);
  6527         }
  6471         }
  6528 
  6472 
  6529         return aLength - bLength;
  6473         return aLength - bLength;
  6530     }
  6474     }
  6531 
  6475 
  6576         if (a == b)
  6520         if (a == b)
  6577             return 0;
  6521             return 0;
  6578         if (a == null || b == null)
  6522         if (a == null || b == null)
  6579             return a == null ? -1 : 1;
  6523             return a == null ? -1 : 1;
  6580 
  6524 
  6581         int length = Math.min(a.length, b.length);
  6525         int i = ArraysSupport.mismatch(a, b,
  6582         for (int i = 0; i < length; i++) {
  6526                                        Math.min(a.length, b.length));
  6583             if (a[i] != b[i]) return Integer.compare(a[i], b[i]);
  6527         if (i >= 0) {
       
  6528             return Integer.compare(a[i], b[i]);
  6584         }
  6529         }
  6585 
  6530 
  6586         return a.length - b.length;
  6531         return a.length - b.length;
  6587     }
  6532     }
  6588 
  6533 
  6651         rangeCheck(a.length, aFromIndex, aToIndex);
  6596         rangeCheck(a.length, aFromIndex, aToIndex);
  6652         rangeCheck(b.length, bFromIndex, bToIndex);
  6597         rangeCheck(b.length, bFromIndex, bToIndex);
  6653 
  6598 
  6654         int aLength = aToIndex - aFromIndex;
  6599         int aLength = aToIndex - aFromIndex;
  6655         int bLength = bToIndex - bFromIndex;
  6600         int bLength = bToIndex - bFromIndex;
  6656         int length = Math.min(aLength, bLength);
  6601         int i = ArraysSupport.mismatch(a, aFromIndex,
  6657         for (int i = 0; i < length; i++) {
  6602                                        b, bFromIndex,
  6658             int va = a[aFromIndex++];
  6603                                        Math.min(aLength, bLength));
  6659             int vb = b[bFromIndex++];
  6604         if (i >= 0) {
  6660             if (va != vb) return Integer.compare(va, vb);
  6605             return Integer.compare(a[aFromIndex + i], b[bFromIndex + i]);
  6661         }
  6606         }
  6662 
  6607 
  6663         return aLength - bLength;
  6608         return aLength - bLength;
  6664     }
  6609     }
  6665 
  6610 
  6703         if (a == b)
  6648         if (a == b)
  6704             return 0;
  6649             return 0;
  6705         if (a == null || b == null)
  6650         if (a == null || b == null)
  6706             return a == null ? -1 : 1;
  6651             return a == null ? -1 : 1;
  6707 
  6652 
  6708         int length = Math.min(a.length, b.length);
  6653         int i = ArraysSupport.mismatch(a, b,
  6709         for (int i = 0; i < length; i++) {
  6654                                        Math.min(a.length, b.length));
  6710             if (a[i] != b[i]) return Integer.compareUnsigned(a[i], b[i]);
  6655         if (i >= 0) {
       
  6656             return Integer.compareUnsigned(a[i], b[i]);
  6711         }
  6657         }
  6712 
  6658 
  6713         return a.length - b.length;
  6659         return a.length - b.length;
  6714     }
  6660     }
  6715 
  6661 
  6769         rangeCheck(a.length, aFromIndex, aToIndex);
  6715         rangeCheck(a.length, aFromIndex, aToIndex);
  6770         rangeCheck(b.length, bFromIndex, bToIndex);
  6716         rangeCheck(b.length, bFromIndex, bToIndex);
  6771 
  6717 
  6772         int aLength = aToIndex - aFromIndex;
  6718         int aLength = aToIndex - aFromIndex;
  6773         int bLength = bToIndex - bFromIndex;
  6719         int bLength = bToIndex - bFromIndex;
  6774         int length = Math.min(aLength, bLength);
  6720         int i = ArraysSupport.mismatch(a, aFromIndex,
  6775         for (int i = 0; i < length; i++) {
  6721                                        b, bFromIndex,
  6776             int va = a[aFromIndex++];
  6722                                        Math.min(aLength, bLength));
  6777             int vb = b[bFromIndex++];
  6723         if (i >= 0) {
  6778             if (va != vb) return Integer.compareUnsigned(va, vb);
  6724             return Integer.compareUnsigned(a[aFromIndex + i], b[bFromIndex + i]);
  6779         }
  6725         }
  6780 
  6726 
  6781         return aLength - bLength;
  6727         return aLength - bLength;
  6782     }
  6728     }
  6783 
  6729 
  6828         if (a == b)
  6774         if (a == b)
  6829             return 0;
  6775             return 0;
  6830         if (a == null || b == null)
  6776         if (a == null || b == null)
  6831             return a == null ? -1 : 1;
  6777             return a == null ? -1 : 1;
  6832 
  6778 
  6833         int length = Math.min(a.length, b.length);
  6779         int i = ArraysSupport.mismatch(a, b,
  6834         for (int i = 0; i < length; i++) {
  6780                                        Math.min(a.length, b.length));
  6835             if (a[i] != b[i]) return Long.compare(a[i], b[i]);
  6781         if (i >= 0) {
       
  6782             return Long.compare(a[i], b[i]);
  6836         }
  6783         }
  6837 
  6784 
  6838         return a.length - b.length;
  6785         return a.length - b.length;
  6839     }
  6786     }
  6840 
  6787 
  6903         rangeCheck(a.length, aFromIndex, aToIndex);
  6850         rangeCheck(a.length, aFromIndex, aToIndex);
  6904         rangeCheck(b.length, bFromIndex, bToIndex);
  6851         rangeCheck(b.length, bFromIndex, bToIndex);
  6905 
  6852 
  6906         int aLength = aToIndex - aFromIndex;
  6853         int aLength = aToIndex - aFromIndex;
  6907         int bLength = bToIndex - bFromIndex;
  6854         int bLength = bToIndex - bFromIndex;
  6908         int length = Math.min(aLength, bLength);
  6855         int i = ArraysSupport.mismatch(a, aFromIndex,
  6909         for (int i = 0; i < length; i++) {
  6856                                        b, bFromIndex,
  6910             long va = a[aFromIndex++];
  6857                                        Math.min(aLength, bLength));
  6911             long vb = b[bFromIndex++];
  6858         if (i >= 0) {
  6912             if (va != vb) return Long.compare(va, vb);
  6859             return Long.compare(a[aFromIndex + i], b[bFromIndex + i]);
  6913         }
  6860         }
  6914 
  6861 
  6915         return aLength - bLength;
  6862         return aLength - bLength;
  6916     }
  6863     }
  6917 
  6864 
  6955         if (a == b)
  6902         if (a == b)
  6956             return 0;
  6903             return 0;
  6957         if (a == null || b == null)
  6904         if (a == null || b == null)
  6958             return a == null ? -1 : 1;
  6905             return a == null ? -1 : 1;
  6959 
  6906 
  6960         int length = Math.min(a.length, b.length);
  6907         int i = ArraysSupport.mismatch(a, b,
  6961         for (int i = 0; i < length; i++) {
  6908                                        Math.min(a.length, b.length));
  6962             if (a[i] != b[i]) return Long.compareUnsigned(a[i], b[i]);
  6909         if (i >= 0) {
       
  6910             return Long.compareUnsigned(a[i], b[i]);
  6963         }
  6911         }
  6964 
  6912 
  6965         return a.length - b.length;
  6913         return a.length - b.length;
  6966     }
  6914     }
  6967 
  6915 
  7021         rangeCheck(a.length, aFromIndex, aToIndex);
  6969         rangeCheck(a.length, aFromIndex, aToIndex);
  7022         rangeCheck(b.length, bFromIndex, bToIndex);
  6970         rangeCheck(b.length, bFromIndex, bToIndex);
  7023 
  6971 
  7024         int aLength = aToIndex - aFromIndex;
  6972         int aLength = aToIndex - aFromIndex;
  7025         int bLength = bToIndex - bFromIndex;
  6973         int bLength = bToIndex - bFromIndex;
  7026         int length = Math.min(aLength, bLength);
  6974         int i = ArraysSupport.mismatch(a, aFromIndex,
  7027         for (int i = 0; i < length; i++) {
  6975                                        b, bFromIndex,
  7028             long va = a[aFromIndex++];
  6976                                        Math.min(aLength, bLength));
  7029             long vb = b[bFromIndex++];
  6977         if (i >= 0) {
  7030             if (va != vb) return Long.compareUnsigned(va, vb);
  6978             return Long.compareUnsigned(a[aFromIndex + i], b[bFromIndex + i]);
  7031         }
  6979         }
  7032 
  6980 
  7033         return aLength - bLength;
  6981         return aLength - bLength;
  7034     }
  6982     }
  7035 
  6983 
  7080         if (a == b)
  7028         if (a == b)
  7081             return 0;
  7029             return 0;
  7082         if (a == null || b == null)
  7030         if (a == null || b == null)
  7083             return a == null ? -1 : 1;
  7031             return a == null ? -1 : 1;
  7084 
  7032 
  7085         int length = Math.min(a.length, b.length);
  7033         int i = ArraysSupport.mismatch(a, b,
  7086         for (int i = 0; i < length; i++) {
  7034                                        Math.min(a.length, b.length));
  7087             float va = a[i], vb = b[i];
  7035         if (i >= 0) {
  7088             if (Float.floatToRawIntBits(va) != Float.floatToRawIntBits(vb)) {
  7036             return Float.compare(a[i], b[i]);
  7089                 int c = Float.compare(va, vb);
       
  7090                 if (c != 0) return c;
       
  7091             }
       
  7092         }
  7037         }
  7093 
  7038 
  7094         return a.length - b.length;
  7039         return a.length - b.length;
  7095     }
  7040     }
  7096 
  7041 
  7159         rangeCheck(a.length, aFromIndex, aToIndex);
  7104         rangeCheck(a.length, aFromIndex, aToIndex);
  7160         rangeCheck(b.length, bFromIndex, bToIndex);
  7105         rangeCheck(b.length, bFromIndex, bToIndex);
  7161 
  7106 
  7162         int aLength = aToIndex - aFromIndex;
  7107         int aLength = aToIndex - aFromIndex;
  7163         int bLength = bToIndex - bFromIndex;
  7108         int bLength = bToIndex - bFromIndex;
  7164         int length = Math.min(aLength, bLength);
  7109         int i = ArraysSupport.mismatch(a, aFromIndex,
  7165         for (int i = 0; i < length; i++) {
  7110                                        b, bFromIndex,
  7166             float va = a[aFromIndex++], vb = b[bFromIndex++];
  7111                                        Math.min(aLength, bLength));
  7167             if (Float.floatToRawIntBits(va) != Float.floatToRawIntBits(vb)) {
  7112         if (i >= 0) {
  7168                 int c = Float.compare(va, vb);
  7113             return Float.compare(a[aFromIndex + i], b[bFromIndex + i]);
  7169                 if (c != 0) return c;
       
  7170             }
       
  7171         }
  7114         }
  7172 
  7115 
  7173         return aLength - bLength;
  7116         return aLength - bLength;
  7174     }
  7117     }
  7175 
  7118 
  7220         if (a == b)
  7163         if (a == b)
  7221             return 0;
  7164             return 0;
  7222         if (a == null || b == null)
  7165         if (a == null || b == null)
  7223             return a == null ? -1 : 1;
  7166             return a == null ? -1 : 1;
  7224 
  7167 
  7225         int length = Math.min(a.length, b.length);
  7168         int i = ArraysSupport.mismatch(a, b,
  7226         for (int i = 0; i < length; i++) {
  7169                                        Math.min(a.length, b.length));
  7227             double va = a[i], vb = b[i];
  7170         if (i >= 0) {
  7228             if (Double.doubleToRawLongBits(va) != Double.doubleToRawLongBits(vb)) {
  7171             return Double.compare(a[i], b[i]);
  7229                 int c = Double.compare(va, vb);
       
  7230                 if (c != 0) return c;
       
  7231             }
       
  7232         }
  7172         }
  7233 
  7173 
  7234         return a.length - b.length;
  7174         return a.length - b.length;
  7235     }
  7175     }
  7236 
  7176 
  7299         rangeCheck(a.length, aFromIndex, aToIndex);
  7239         rangeCheck(a.length, aFromIndex, aToIndex);
  7300         rangeCheck(b.length, bFromIndex, bToIndex);
  7240         rangeCheck(b.length, bFromIndex, bToIndex);
  7301 
  7241 
  7302         int aLength = aToIndex - aFromIndex;
  7242         int aLength = aToIndex - aFromIndex;
  7303         int bLength = bToIndex - bFromIndex;
  7243         int bLength = bToIndex - bFromIndex;
  7304         int length = Math.min(aLength, bLength);
  7244         int i = ArraysSupport.mismatch(a, aFromIndex,
  7305         for (int i = 0; i < length; i++) {
  7245                                        b, bFromIndex,
  7306             double va = a[aFromIndex++], vb = b[bFromIndex++];
  7246                                        Math.min(aLength, bLength));
  7307             if (Double.doubleToRawLongBits(va) != Double.doubleToRawLongBits(vb)) {
  7247         if (i >= 0) {
  7308                 int c = Double.compare(va, vb);
  7248             return Double.compare(a[aFromIndex + i], b[bFromIndex + i]);
  7309                 if (c != 0) return c;
       
  7310             }
       
  7311         }
  7249         }
  7312 
  7250 
  7313         return aLength - bLength;
  7251         return aLength - bLength;
  7314     }
  7252     }
  7315 
  7253 
  7671     public static int mismatch(boolean[] a, boolean[] b) {
  7609     public static int mismatch(boolean[] a, boolean[] b) {
  7672         int length = Math.min(a.length, b.length); // Check null array refs
  7610         int length = Math.min(a.length, b.length); // Check null array refs
  7673         if (a == b)
  7611         if (a == b)
  7674             return -1;
  7612             return -1;
  7675 
  7613 
  7676         for (int i = 0; i < length; i++) {
  7614         int i = ArraysSupport.mismatch(a, b, length);
  7677             if (a[i] != b[i]) return i;
  7615         return (i < 0 && a.length != b.length) ? length : i;
  7678         }
       
  7679 
       
  7680         return a.length != b.length ? length : -1;
       
  7681     }
  7616     }
  7682 
  7617 
  7683     /**
  7618     /**
  7684      * Finds and returns the relative index of the first mismatch between two
  7619      * Finds and returns the relative index of the first mismatch between two
  7685      * {@code boolean} arrays over the specified ranges, otherwise return -1 if
  7620      * {@code boolean} arrays over the specified ranges, otherwise return -1 if
  7747         rangeCheck(b.length, bFromIndex, bToIndex);
  7682         rangeCheck(b.length, bFromIndex, bToIndex);
  7748 
  7683 
  7749         int aLength = aToIndex - aFromIndex;
  7684         int aLength = aToIndex - aFromIndex;
  7750         int bLength = bToIndex - bFromIndex;
  7685         int bLength = bToIndex - bFromIndex;
  7751         int length = Math.min(aLength, bLength);
  7686         int length = Math.min(aLength, bLength);
  7752         for (int i = 0; i < length; i++) {
  7687         int i = ArraysSupport.mismatch(a, aFromIndex,
  7753             if (a[aFromIndex++] != b[bFromIndex++]) return i;
  7688                                        b, bFromIndex,
  7754         }
  7689                                        length);
  7755 
  7690         return (i < 0 && aLength != bLength) ? length : i;
  7756         return aLength != bLength ? length : -1;
       
  7757     }
  7691     }
  7758 
  7692 
  7759     // Mismatch byte
  7693     // Mismatch byte
  7760 
  7694 
  7761     /**
  7695     /**
  7802     public static int mismatch(byte[] a, byte[] b) {
  7736     public static int mismatch(byte[] a, byte[] b) {
  7803         int length = Math.min(a.length, b.length); // Check null array refs
  7737         int length = Math.min(a.length, b.length); // Check null array refs
  7804         if (a == b)
  7738         if (a == b)
  7805             return -1;
  7739             return -1;
  7806 
  7740 
  7807         for (int i = 0; i < length; i++) {
  7741         int i = ArraysSupport.mismatch(a, b, length);
  7808             if (a[i] != b[i]) return i;
  7742         return (i < 0 && a.length != b.length) ? length : i;
  7809         }
       
  7810 
       
  7811         return a.length != b.length ? length : -1;
       
  7812     }
  7743     }
  7813 
  7744 
  7814     /**
  7745     /**
  7815      * Finds and returns the relative index of the first mismatch between two
  7746      * Finds and returns the relative index of the first mismatch between two
  7816      * {@code byte} arrays over the specified ranges, otherwise return -1 if no
  7747      * {@code byte} arrays over the specified ranges, otherwise return -1 if no
  7878         rangeCheck(b.length, bFromIndex, bToIndex);
  7809         rangeCheck(b.length, bFromIndex, bToIndex);
  7879 
  7810 
  7880         int aLength = aToIndex - aFromIndex;
  7811         int aLength = aToIndex - aFromIndex;
  7881         int bLength = bToIndex - bFromIndex;
  7812         int bLength = bToIndex - bFromIndex;
  7882         int length = Math.min(aLength, bLength);
  7813         int length = Math.min(aLength, bLength);
  7883         for (int i = 0; i < length; i++) {
  7814         int i = ArraysSupport.mismatch(a, aFromIndex,
  7884             if (a[aFromIndex++] != b[bFromIndex++]) return i;
  7815                                        b, bFromIndex,
  7885         }
  7816                                        length);
  7886 
  7817         return (i < 0 && aLength != bLength) ? length : i;
  7887         return aLength != bLength ? length : -1;
       
  7888     }
  7818     }
  7889 
  7819 
  7890     // Mismatch char
  7820     // Mismatch char
  7891 
  7821 
  7892     /**
  7822     /**
  7933     public static int mismatch(char[] a, char[] b) {
  7863     public static int mismatch(char[] a, char[] b) {
  7934         int length = Math.min(a.length, b.length); // Check null array refs
  7864         int length = Math.min(a.length, b.length); // Check null array refs
  7935         if (a == b)
  7865         if (a == b)
  7936             return -1;
  7866             return -1;
  7937 
  7867 
  7938         for (int i = 0; i < length; i++) {
  7868         int i = ArraysSupport.mismatch(a, b, length);
  7939             if (a[i] != b[i]) return i;
  7869         return (i < 0 && a.length != b.length) ? length : i;
  7940         }
       
  7941 
       
  7942         return a.length != b.length ? length : -1;
       
  7943     }
  7870     }
  7944 
  7871 
  7945     /**
  7872     /**
  7946      * Finds and returns the relative index of the first mismatch between two
  7873      * Finds and returns the relative index of the first mismatch between two
  7947      * {@code char} arrays over the specified ranges, otherwise return -1 if no
  7874      * {@code char} arrays over the specified ranges, otherwise return -1 if no
  8009         rangeCheck(b.length, bFromIndex, bToIndex);
  7936         rangeCheck(b.length, bFromIndex, bToIndex);
  8010 
  7937 
  8011         int aLength = aToIndex - aFromIndex;
  7938         int aLength = aToIndex - aFromIndex;
  8012         int bLength = bToIndex - bFromIndex;
  7939         int bLength = bToIndex - bFromIndex;
  8013         int length = Math.min(aLength, bLength);
  7940         int length = Math.min(aLength, bLength);
  8014         for (int i = 0; i < length; i++) {
  7941         int i = ArraysSupport.mismatch(a, aFromIndex,
  8015             if (a[aFromIndex++] != b[bFromIndex++]) return i;
  7942                                        b, bFromIndex,
  8016         }
  7943                                        length);
  8017 
  7944         return (i < 0 && aLength != bLength) ? length : i;
  8018         return aLength != bLength ? length : -1;
       
  8019     }
  7945     }
  8020 
  7946 
  8021     // Mismatch short
  7947     // Mismatch short
  8022 
  7948 
  8023     /**
  7949     /**
  8064     public static int mismatch(short[] a, short[] b) {
  7990     public static int mismatch(short[] a, short[] b) {
  8065         int length = Math.min(a.length, b.length); // Check null array refs
  7991         int length = Math.min(a.length, b.length); // Check null array refs
  8066         if (a == b)
  7992         if (a == b)
  8067             return -1;
  7993             return -1;
  8068 
  7994 
  8069         for (int i = 0; i < length; i++) {
  7995         int i = ArraysSupport.mismatch(a, b, length);
  8070             if (a[i] != b[i]) return i;
  7996         return (i < 0 && a.length != b.length) ? length : i;
  8071         }
       
  8072 
       
  8073         return a.length != b.length ? length : -1;
       
  8074     }
  7997     }
  8075 
  7998 
  8076     /**
  7999     /**
  8077      * Finds and returns the relative index of the first mismatch between two
  8000      * Finds and returns the relative index of the first mismatch between two
  8078      * {@code short} arrays over the specified ranges, otherwise return -1 if no
  8001      * {@code short} arrays over the specified ranges, otherwise return -1 if no
  8140         rangeCheck(b.length, bFromIndex, bToIndex);
  8063         rangeCheck(b.length, bFromIndex, bToIndex);
  8141 
  8064 
  8142         int aLength = aToIndex - aFromIndex;
  8065         int aLength = aToIndex - aFromIndex;
  8143         int bLength = bToIndex - bFromIndex;
  8066         int bLength = bToIndex - bFromIndex;
  8144         int length = Math.min(aLength, bLength);
  8067         int length = Math.min(aLength, bLength);
  8145         for (int i = 0; i < length; i++) {
  8068         int i = ArraysSupport.mismatch(a, aFromIndex,
  8146             if (a[aFromIndex++] != b[bFromIndex++]) return i;
  8069                                        b, bFromIndex,
  8147         }
  8070                                        length);
  8148 
  8071         return (i < 0 && aLength != bLength) ? length : i;
  8149         return aLength != bLength ? length : -1;
       
  8150     }
  8072     }
  8151 
  8073 
  8152     // Mismatch int
  8074     // Mismatch int
  8153 
  8075 
  8154     /**
  8076     /**
  8195     public static int mismatch(int[] a, int[] b) {
  8117     public static int mismatch(int[] a, int[] b) {
  8196         int length = Math.min(a.length, b.length); // Check null array refs
  8118         int length = Math.min(a.length, b.length); // Check null array refs
  8197         if (a == b)
  8119         if (a == b)
  8198             return -1;
  8120             return -1;
  8199 
  8121 
  8200         for (int i = 0; i < length; i++) {
  8122         int i = ArraysSupport.mismatch(a, b, length);
  8201             if (a[i] != b[i]) return i;
  8123         return (i < 0 && a.length != b.length) ? length : i;
  8202         }
       
  8203 
       
  8204         return a.length != b.length ? length : -1;
       
  8205     }
  8124     }
  8206 
  8125 
  8207     /**
  8126     /**
  8208      * Finds and returns the relative index of the first mismatch between two
  8127      * Finds and returns the relative index of the first mismatch between two
  8209      * {@code int} arrays over the specified ranges, otherwise return -1 if no
  8128      * {@code int} arrays over the specified ranges, otherwise return -1 if no
  8271         rangeCheck(b.length, bFromIndex, bToIndex);
  8190         rangeCheck(b.length, bFromIndex, bToIndex);
  8272 
  8191 
  8273         int aLength = aToIndex - aFromIndex;
  8192         int aLength = aToIndex - aFromIndex;
  8274         int bLength = bToIndex - bFromIndex;
  8193         int bLength = bToIndex - bFromIndex;
  8275         int length = Math.min(aLength, bLength);
  8194         int length = Math.min(aLength, bLength);
  8276         for (int i = 0; i < length; i++) {
  8195         int i = ArraysSupport.mismatch(a, aFromIndex,
  8277             if (a[aFromIndex++] != b[bFromIndex++]) return i;
  8196                                        b, bFromIndex,
  8278         }
  8197                                        length);
  8279 
  8198         return (i < 0 && aLength != bLength) ? length : i;
  8280         return aLength != bLength ? length : -1;
       
  8281     }
  8199     }
  8282 
  8200 
  8283     // Mismatch long
  8201     // Mismatch long
  8284 
  8202 
  8285     /**
  8203     /**
  8326     public static int mismatch(long[] a, long[] b) {
  8244     public static int mismatch(long[] a, long[] b) {
  8327         int length = Math.min(a.length, b.length); // Check null array refs
  8245         int length = Math.min(a.length, b.length); // Check null array refs
  8328         if (a == b)
  8246         if (a == b)
  8329             return -1;
  8247             return -1;
  8330 
  8248 
  8331         for (int i = 0; i < length; i++) {
  8249         int i = ArraysSupport.mismatch(a, b, length);
  8332             if (a[i] != b[i]) return i;
  8250         return (i < 0 && a.length != b.length) ? length : i;
  8333         }
       
  8334 
       
  8335         return a.length != b.length ? length : -1;
       
  8336     }
  8251     }
  8337 
  8252 
  8338     /**
  8253     /**
  8339      * Finds and returns the relative index of the first mismatch between two
  8254      * Finds and returns the relative index of the first mismatch between two
  8340      * {@code long} arrays over the specified ranges, otherwise return -1 if no
  8255      * {@code long} arrays over the specified ranges, otherwise return -1 if no
  8402         rangeCheck(b.length, bFromIndex, bToIndex);
  8317         rangeCheck(b.length, bFromIndex, bToIndex);
  8403 
  8318 
  8404         int aLength = aToIndex - aFromIndex;
  8319         int aLength = aToIndex - aFromIndex;
  8405         int bLength = bToIndex - bFromIndex;
  8320         int bLength = bToIndex - bFromIndex;
  8406         int length = Math.min(aLength, bLength);
  8321         int length = Math.min(aLength, bLength);
  8407         for (int i = 0; i < length; i++) {
  8322         int i = ArraysSupport.mismatch(a, aFromIndex,
  8408             if (a[aFromIndex++] != b[bFromIndex++]) return i;
  8323                                        b, bFromIndex,
  8409         }
  8324                                        length);
  8410 
  8325         return (i < 0 && aLength != bLength) ? length : i;
  8411         return aLength != bLength ? length : -1;
       
  8412     }
  8326     }
  8413 
  8327 
  8414     // Mismatch float
  8328     // Mismatch float
  8415 
  8329 
  8416     /**
  8330     /**
  8457     public static int mismatch(float[] a, float[] b) {
  8371     public static int mismatch(float[] a, float[] b) {
  8458         int length = Math.min(a.length, b.length); // Check null array refs
  8372         int length = Math.min(a.length, b.length); // Check null array refs
  8459         if (a == b)
  8373         if (a == b)
  8460             return -1;
  8374             return -1;
  8461 
  8375 
  8462         for (int i = 0; i < length; i++) {
  8376         int i = ArraysSupport.mismatch(a, b, length);
  8463             float va = a[i], vb = b[i];
  8377         return (i < 0 && a.length != b.length) ? length : i;
  8464             if (Float.floatToRawIntBits(va) != Float.floatToRawIntBits(vb))
       
  8465                 if (!Float.isNaN(va) || !Float.isNaN(vb))
       
  8466                     return i;
       
  8467         }
       
  8468 
       
  8469         return a.length != b.length ? length : -1;
       
  8470     }
  8378     }
  8471 
  8379 
  8472     /**
  8380     /**
  8473      * Finds and returns the relative index of the first mismatch between two
  8381      * Finds and returns the relative index of the first mismatch between two
  8474      * {@code float} arrays over the specified ranges, otherwise return -1 if no
  8382      * {@code float} arrays over the specified ranges, otherwise return -1 if no
  8536         rangeCheck(b.length, bFromIndex, bToIndex);
  8444         rangeCheck(b.length, bFromIndex, bToIndex);
  8537 
  8445 
  8538         int aLength = aToIndex - aFromIndex;
  8446         int aLength = aToIndex - aFromIndex;
  8539         int bLength = bToIndex - bFromIndex;
  8447         int bLength = bToIndex - bFromIndex;
  8540         int length = Math.min(aLength, bLength);
  8448         int length = Math.min(aLength, bLength);
  8541         for (int i = 0; i < length; i++) {
  8449         int i = ArraysSupport.mismatch(a, aFromIndex,
  8542             float va = a[aFromIndex++], vb = b[bFromIndex++];
  8450                                        b, bFromIndex,
  8543             if (Float.floatToRawIntBits(va) != Float.floatToRawIntBits(vb))
  8451                                        length);
  8544                 if (!Float.isNaN(va) || !Float.isNaN(vb))
  8452         return (i < 0 && aLength != bLength) ? length : i;
  8545                     return i;
       
  8546         }
       
  8547 
       
  8548         return aLength != bLength ? length : -1;
       
  8549     }
  8453     }
  8550 
  8454 
  8551     // Mismatch double
  8455     // Mismatch double
  8552 
  8456 
  8553     /**
  8457     /**
  8594     public static int mismatch(double[] a, double[] b) {
  8498     public static int mismatch(double[] a, double[] b) {
  8595         int length = Math.min(a.length, b.length); // Check null array refs
  8499         int length = Math.min(a.length, b.length); // Check null array refs
  8596         if (a == b)
  8500         if (a == b)
  8597             return -1;
  8501             return -1;
  8598 
  8502 
  8599         for (int i = 0; i < length; i++) {
  8503         int i = ArraysSupport.mismatch(a, b, length);
  8600             double va = a[i], vb = b[i];
  8504         return (i < 0 && a.length != b.length) ? length : i;
  8601             if (Double.doubleToRawLongBits(va) != Double.doubleToRawLongBits(vb))
       
  8602                 if (!Double.isNaN(va) || !Double.isNaN(vb))
       
  8603                     return i;
       
  8604         }
       
  8605 
       
  8606         return a.length != b.length ? length : -1;
       
  8607     }
  8505     }
  8608 
  8506 
  8609     /**
  8507     /**
  8610      * Finds and returns the relative index of the first mismatch between two
  8508      * Finds and returns the relative index of the first mismatch between two
  8611      * {@code double} arrays over the specified ranges, otherwise return -1 if
  8509      * {@code double} arrays over the specified ranges, otherwise return -1 if
  8673         rangeCheck(b.length, bFromIndex, bToIndex);
  8571         rangeCheck(b.length, bFromIndex, bToIndex);
  8674 
  8572 
  8675         int aLength = aToIndex - aFromIndex;
  8573         int aLength = aToIndex - aFromIndex;
  8676         int bLength = bToIndex - bFromIndex;
  8574         int bLength = bToIndex - bFromIndex;
  8677         int length = Math.min(aLength, bLength);
  8575         int length = Math.min(aLength, bLength);
  8678         for (int i = 0; i < length; i++) {
  8576         int i = ArraysSupport.mismatch(a, aFromIndex,
  8679             double va = a[aFromIndex++], vb = b[bFromIndex++];
  8577                                        b, bFromIndex,
  8680             if (Double.doubleToRawLongBits(va) != Double.doubleToRawLongBits(vb))
  8578                                        length);
  8681                 if (!Double.isNaN(va) || !Double.isNaN(vb))
  8579         return (i < 0 && aLength != bLength) ? length : i;
  8682                     return i;
       
  8683         }
       
  8684 
       
  8685         return aLength != bLength ? length : -1;
       
  8686     }
  8580     }
  8687 
  8581 
  8688     // Mismatch objects
  8582     // Mismatch objects
  8689 
  8583 
  8690     /**
  8584     /**