5個鮮為人知Java集合特性

banq發表於2024-04-13

Java Collections 框架提供了一套全面的介面和類來有效地處理集合。Collections utils提供了一些鮮為人知的功能。

在本文中,我們將透過簡單的示例探討這些鮮為人知的功能。


1.Collections.nCopies()
Java 中的此方法返回一個不可變列表,其中包含指定物件的 ncopies。

ncopies()的內部程式碼是 Collections utils 的一部分。

    public static <T> List<T> nCopies(int n, T o) {
        if (n < 0)
            throw new IllegalArgumentException(<font>"List length = " + n);
        return new CopiesList<>(n, o);
    }

例子:

public static void nCopies(){
     List<String> tests = Collections.nCopies(10, <font>"test");
     System.out.println(tests);
}
[test, test, test, test, test, test, test, test, test, test]

2.Collections.Frequency()
Java 中的此方法用於查詢給定集合中指定元素的頻率。

內部程式碼:

    public static int frequency(Collection<?> c, Object o) {
        int result = 0;
        if (o == null) {
            for (Object e : c)
                if (e == null)
                    result++;
        } else {
            for (Object e : c)
                if (o.equals(e))
                    result++;
        }
        return result;
    }

例子:

 public static void frequency(){
      List<Integer> integers = List.of(1, 2, 3, 4, 5, 1, 2, 3, 2, 3, 4);
      int frequency = Collections.frequency(integers, 3);
      System.out.println(frequency);
 }

3.Collections.disjoint()
Java 中的這個方法提供了一種檢查兩個集合是否有公共元素的方法,如果有則返回 true,否則返回 false。透過此功能,開發人員可以快速查詢集合中是否存在常見元素,而無需迭代它們。

public static boolean disjoint(Collection<?> c1, Collection<?> c2) { }
例子:

public static void disjoint(){
     List<Integer> integers = List.of(1, 2, 3, 4);
     List<Integer> integers1 = List.of(5, 6);
     boolean disjoint = Collections.disjoint(integers1, integers);
     System.out.println(disjoint);
        
     List<Integer> integers2 = List.of(1, 2, 3, 4);
     boolean disjoint1 = Collections.disjoint(integers2, integers);
     System.out.println(disjoint1);
}

4.Collections.singleton()
Java 中的此方法用於建立僅包含單個元素的不可變集。此方法返回一個僅包含單個元素的不可變Set 。如果我們嘗試新增或刪除一個元素,我們將得到一個異常。

內部程式碼:

public static <T> Set<T> singleton(T o) {
    return new SingletonSet<>(o);
}

例子:

    public static void singleton(){
        Set<String> singleElement = Collections.singleton(<font>"Hello world");
        System.out.println(singleElement);
        singleElement.add(
"test");
    }
[Hello world]
Exception in thread
"main" java.lang.UnsupportedOperationException
 at java.base/java.util.AbstractCollection.add(AbstractCollection.java:251)
 at misc.JavaCollectionFeatures.singleton(JavaCollectionFeatures.java:41)
 at misc.JavaCollectionFeatures.main(JavaCollectionFeatures.java:13)

5. Collections.rotate()
Java 中的此方法將指定列表的元素旋轉指定的距離。

該方法對列表中的元素執行“迴圈旋轉”,根據指定的距離有效地將它們向左或向右移動。

內部程式碼:

public static void rotate(List<?> list, int distance) {
      if (list instanceof RandomAccess || list.size() < ROTATE_THRESHOLD)
          rotate1(list, distance);
      else
          rotate2(list, distance);
}

例子:

public static void rotate(){
     List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5, 3, 5, 5, 6);
     Collections.rotate(integers, 6);
     System.out.println(integers);
        
     List<Integer> integers1 = Arrays.asList(1, 2, 3, 4, 5, 3, 5, 5, 6);
     Collections.rotate(integers1, 10);
     System.out.println(integers1);
        
     List<Integer> integers2 = Arrays.asList(1, 2, 3, 4, 5, 3, 5, 5, 6);
     Collections.rotate(integers2, -3);
     System.out.println(integers2);
}
[4, 5, 3, 5, 5, 6, 1, 2, 3]
[6, 1, 2, 3, 4, 5, 3, 5, 5]
[4, 5, 3, 5, 5, 6, 1, 2, 3]

結論
在本文中,我們探討了Collections實用程式鮮為人知的功能。雖然 Java Collections實用程式提供了一組豐富的功能,但開發人員可能會發現一些鮮為人知的功能在某些用例中很方便。

相關文章