有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java中使用子列表的arraylist分区数据

我有一个列表实现了ArrayList,它有大量的索引。我想要一份工作 将其放入单独的ArrayList中。我已尽我所能

      List<List<Integer>> list = new ArrayList<List<Integer>>(10000000);
      List<List<Integer>> sublist1 = list.subList(0,x)
      List<List<Integer>> sublist2 = list.subList(x,y)

等等。我不知道这是否是正确的分区方式。你能给我建议一种有效的分区方法吗

[编辑]

我有这样一个数组列表:

    [[1,2,3],[4,5,6],[8,9,10],[11,12,13],[44,88,1000], ......,[54,23,53]]

这个名单很长。我想从上面的列表中得到一些小的子列表。每个列表将包含不重叠的内部列表:

sublist1:[[1,2,3][4,5,6] ...[.,.,.]]  sublist2:[[,,,][] .... [,,,,]]  sublistn:[[,,,][,,,]....[54,23,53]]

[编辑] 请不要混淆[]是空列表。我想显示列表中列表的数量


共 (3) 个答案

  1. # 1 楼答案

    我觉得你把这些类型搞混了

    也许这就是你想要的:

    public static List<List<Integer>> getSubLists(List<Integer> ints, int k) {
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        for (int i = 0; i < ints.size(); i += k)
            result.add(ints.subList(i, Math.min(i+k, ints.size())));
        return result;
    }
    

    用法示例:

    List<Integer> ints = Arrays.asList(10, 20, 30, 40, 50, 60, 70, 80, 90, 100);
    
    List<List<Integer>> sublists = getSubLists(ints, 3);
    
    // Prints [[10, 20, 30], [40, 50, 60], [70, 80, 90], [100]]
    System.out.println(sublists);
    
  2. # 2 楼答案

    我建议您详细了解一下java collection API来回答这个问题,因为它主要取决于访问类型和您在集合中访问的数据类型

    没有任何进一步的细节,至少有两个好的建议:

    1. 最佳的解决方案是移动到树集,因为这些是自然快速的数据结构,只需切割树的一部分即可拆分。一切都已经是JavaAPI的一部分,您将没有太多工作要做这要求您的用例不允许重复值,并且在集合中包含可订购的数据,但将始终为您提供logn操作

    2. 如果你被不可排序的数据所困扰,并且你承认重复的价值,你将不得不使用列表。ArrayList有一个访问O(n)的高效实现,因为它由一个数组支持。然而,由于分配相邻内存的长空间的复杂性,使其变得非常大会带来一些问题在使用ArrayList或LinkedList之间有一个平衡点,您必须根据自己的需求来确定,包括随机访问的需要、创建列表后的插入/删除等

  3. # 3 楼答案

    下面是一个遵循您的示例的建议:

    private static List<List<Integer>> getSubLists(List<List<Integer>> ints, int i) {
        List<List<Integer>> sublist =
                new ArrayList<List<Integer>>(Collections.nCopies(ints.size(),
                                             Collections.<Integer>emptyList()));
        sublist.set(i, ints.get(i));
        return sublist;
    }
    

    用法示例:

    List<List<Integer>> ints = Arrays.asList(Arrays.asList(1,2,3),
                                             Arrays.asList(4,5,6),
                                             Arrays.asList(54,23,53));
    
    List<List<Integer>> subList0 = getSubLists(ints, 0);
    List<List<Integer>> subList1 = getSubLists(ints, 1);
    List<List<Integer>> subList2 = getSubLists(ints, 2);
    
    System.out.println("subList0: " + subList0);
    System.out.println("subList1: " + subList1);
    System.out.println("subList2: " + subList2);
    

    输出:

    subList0: [[1, 2, 3], [], []]
    subList1: [[], [4, 5, 6], []]
    subList2: [[], [], [54, 23, 53]]