如何获取大小为X的Java集并进入X/Y集?

Jam*_*mes 5 java set hashset

我有一个Java Set(特别是HashSet).假设它的大小为10k.如何将其分为5套,每套尺寸为2k?

use*_*870 18

Guava有用于分区Iterable类的库.该Iterables是具有静态方法来划分可迭代类的实用程序类.返回值虽然是Iterable列表.给定的代码显示了如何执行此操作.

Set<Integer> myIntSet = new HashSet<Integer>();
// fill the set
Iterable<List<Integer>> lists = Iterables.partition(myIntSet, SIZE_EACH_PARTITION);
Run Code Online (Sandbox Code Playgroud)


wch*_*gin 7

此方法将拆分集合的元素,以便第一个集合包含第一个2000,第二个集合包含下一个2000,等等.

public static <T> List<Set<T>> split(Set<T> original, int count) {
    // Create a list of sets to return.
    ArrayList<Set<T>> result = new ArrayList<Set<T>>(count);

    // Create an iterator for the original set.
    Iterator<T> it = original.iterator();

    // Calculate the required number of elements for each set.
    int each = original.size() / count;

    // Create each new set.
    for (int i = 0; i < count; i++) {
        HashSet<T> s = new HashSet<T>(original.size() / count + 1);
        result.add(s);
        for (int j = 0; j < each && it.hasNext(); j++) {
            s.add(it.next());
        }
    }
    return result;
}

//As example, in your code...

Set<Integer> originalSet = new HashSet<Integer>();
// [fill the set...]
List<Set<Integer>> splitSets = split(originalSet, 5);
Set<Integer> first = splitSets.get(0); // etc.
Run Code Online (Sandbox Code Playgroud)