Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将大小为X的Java集分解为X/Y集?_Java_Set_Hashset - Fatal编程技术网

如何将大小为X的Java集分解为X/Y集?

如何将大小为X的Java集分解为X/Y集?,java,set,hashset,Java,Set,Hashset,我有一个Java集(特别是HashSet)。假设它的大小为10k。如何将其拆分为5组,每组大小为2k?迭代整个集合,将前2000个元素添加到第一个新集合,将第二个2000个元素添加到第二个新集合,等等。此方法将拆分集合的元素,以便第一个集合包含前2000个元素,第二个集合包含下一个2000个元素,等等 public static <T> List<Set<T>> split(Set<T> original, int count) { //

我有一个Java集(特别是HashSet)。假设它的大小为10k。如何将其拆分为5组,每组大小为2k?

迭代整个集合,将前2000个元素添加到第一个新集合,将第二个2000个元素添加到第二个新集合,等等。

此方法将拆分集合的元素,以便第一个集合包含前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.
公共静态列表拆分(设置原始、整数计数){
//创建要返回的集合列表。
ArrayList结果=新的ArrayList(计数);
//为原始集合创建迭代器。
Iterator it=original.Iterator();
//计算每组所需的元素数量。
int each=original.size()/count;
//创建每个新集合。
for(int i=0;i
如果您不想自己编写,请查看。Lists类有一个方法分区(List,int),用于将列表拆分为具有指定大小的多个列表。
请看

我写了一些东西来拆分集合

它使用中间数组和列表

它使用Arrays.asList和Arrays.copyOfRange方法

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;


public class SetSplitTest {
    //define and initialize set
    private static Set<Integer> largeSet;
    static {
        largeSet  = new HashSet<Integer>();

        for (int i = 0; i < 10000; i++) {
            largeSet.add(i);
        }
    }


    public static void main() {
        System.out.println(largeSet);
        int amountOfSets = 5; //amount of subsets wanted
        Set<Integer>[] subsets = new Set[amountOfSets]; //array holding the subsets

        Integer[] largesetarray =  largeSet.toArray(new Integer[largeSet.size()]);

        for (int i = 1; i <= amountOfSets; i++) {
            int fromIndex = (i-1) * largeSet.size() / amountOfSets;
            int toIndex = i * largeSet.size() / amountOfSets - 1; 
            Set<Integer> subHashSet = new HashSet<Integer>();
            subHashSet.addAll(Arrays.asList(Arrays.copyOfRange(largesetarray, fromIndex, toIndex)));

            subsets[i - 1] = subHashSet;
        }

        for (Set<Integer> subset : subsets) {
            System.out.println(subset);
        }
    }
}
导入java.util.array;
导入java.util.HashSet;
导入java.util.Set;
公共类集合片段{
//定义并初始化集合
私人静态设置慷慨;
静止的{
largeSet=新HashSet();
对于(int i=0;i<10000;i++){
加上(i);
}
}
公共静态void main(){
System.out.println(慷慨集);
int amountOfSets=5;//需要的子集数量
Set[]subsets=新集合[amountOfSets];//包含子集的数组
整数[]largesetarray=largeSet.toArray(新整数[largeSet.size()]);
for(int i=1;i有库来划分Iterable类。是一个实用程序类,它有静态方法来划分Iterable类。但是返回值是列表的Iterable。给定的代码说明了如何做到这一点

Set<Integer> myIntSet = new HashSet<Integer>();
// fill the set
Iterable<List<Integer>> lists = Iterables.partition(myIntSet, SIZE_EACH_PARTITION);
Set myIntSet=newhashset();
//填补空缺
Iterable list=Iterables.partition(myIntSet,每个分区的大小);

在将元素分配到这5个子集中时,您想使用一些特定的规则吗?@Pshemo:不需要特定的规则。我可以按照NHAHDH的建议去做。我想我只是忽略了一个像列表一样的lib调用。subList@James这就是JavaDoc的用途:,,…j.add(it.next())=>s.add(it.next());我认为,如果将5个元素划分为包含2个元素的页面,那么代码将给出包含2个元素的2个页面。最后一个元素将丢失。因此
I
=>
I