按每个子列表中的第一个数字对 List<List<Integer>> 进行排序

KDX*_*DX2 3 java sorting list arraylist data-structures

我遇到了以下问题。我有一个 ArrayList(1) 的 ArrayLists(2)。我需要做的是,对结构进行排序,以便 ArrayLists(2) 的第一个元素按照 ArrayList(1) 的升序排列。澄清:

输入:

3, 8, 6
2, 14, 205, 44, 1
1, 3
Run Code Online (Sandbox Code Playgroud)

输出:

1, 3
2, 14, 205, 44, 1
3, 8, 6
Run Code Online (Sandbox Code Playgroud)

看看它如何仅根据第一个值对行进行排序。

目前,为我定义数组列表的数组列表的方式是:

List<List<Integer>> graph = new ArrayList<List<Integer>>();
// and I add elements to it likewise
graph.get(currentIndex).add(new ArrayList<Integer>());
Run Code Online (Sandbox Code Playgroud)

我使用 ArrayList 的原因是因为我读到它比 LinkedList 内存效率更高,并且因为我正在构建图的邻接列表列表。其中节点的数量或者每个节点的邻接列表的长度都可以变化。行的第一个元素是start_node,接下来的元素是其相邻元素。您能告诉我如何实现这种排序吗?

MyS*_*ver 5

据我了解,您希望按每个嵌套列表的第一个元素对顶级列表进行排序。它是否正确?我将这样做:

List<List<Integer>> graph = new ArrayList<List<Integer>>();
// add a bunch of things ...
// ...

// Now, to sort:
graph.sort((x,y) -> Integer.compare(x.get(0), y.get(0)));
Run Code Online (Sandbox Code Playgroud)

这是用于Integer获取 a Comparator,这是该sort()方法需要按某些自定义标准进行排序的内容。在这种情况下,我们告诉它通过比较两个任意项目来对Listof进行排序,方法是获取它们的第一个项目并像通常比较 s 一样比较它们。Lists graphgraphInteger

请注意,这假设 中的所有项目graph 都有第一个项目。