我有一个List实现的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]]
[编辑]
请不要混淆[]
是空列表。我想显示列表中的列表数。
答案 0 :(得分: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);
答案 1 :(得分:1)
这是一个跟随你的例子的建议:
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]]
答案 2 :(得分:1)
我建议您详细查看java集合API来回答这个问题,因为它主要取决于访问类型和您在集合中访问的数据类型。
没有任何进一步的细节,至少有两个好的建议:
最佳解决方案是移动到TreeSet,因为这些是自然快速的数据结构,只需切割树的一部分即可拆分。一切都已经成为Java API的一部分,您将无需做太多工作。 这要求您的用例不允许重复值,并且在您的集合中包含可订购数据,但始终会为您提供登录操作
如果您遇到不可订购的数据并且您承认重复的价值,则必须使用列表。 ArrayList具有访问O(n)的高效实现,因为它由Array支持。然而,由于分配相邻存储器的长空间的复杂性,使其非常大会带来一些问题。 使用ArrayList或LinkedList之间有一个收支平衡,你应该根据你的要求找出它,包括随机访问的需要,创建列表后的插入/删除等等