当我创建一个 Java 列表并且我希望头部是一个列表时,它应该打印 [[-1,0],1,2,3,4]还是没关系,它只是将子列表 [-1, 0] 保留为两个单独的元素,如 [-1, 0, 1, 2,3,4],我怎样才能获得第一个结构作为 aswer。
从你的帖子中,我想你是在问如何在 Java 中创建一个包含列表和非列表元素的列表"构造"。
在 Java 中,列表/数组的所有元素都需要具有相同的类型。在您发布的示例中([[-1,0],1,2,3,4]
(,元素的类型并不完全相同。你拥有的是:[List<Integer>, Integer, Integer, Integer, Integer]
.第一个是不同的,这在Java中是不允许的。
因此,您需要做的是使列表/数组的所有元素都是相同的类型。
对于列表中只有整数的情况,最简单的方法是将类型更改为:[List<Integer>, List<Integer>, List<Integer>, List<Integer>, List<Integer>]
(使用您的特定值:[[-1,0],[1],[2],[3],[4]]
(。而不是List<Integer>
和Integer
的列表,您现在有一个仅包含List<Integer>
的列表(您的某些列表恰好只包含 1 个元素,但这没关系(。
这称为"二维列表",根据您是要使用数组还是java.util.List
对其进行编码,您可以通过以下方式之一对其进行编码:
// with arrays
int[] myTwoDarr = int[5][];
myTwoDarr[0] = new int[]{-1, 0};
myTwoDarr[1] = new int[]{1};
myTwoDarr[2] = new int[]{2};
myTwoDarr[3] = new int[]{3};
myTwoDarr[4] = new int[]{4};
// With Lists
List<List<Integer>> myList = new LinkedList<>();
List<Integer> nestedList1 = new LinkedList<>();
nestedList.add(-1);
nestedList.add(0);
myList.add(nestedList1);
List<Integer> nestedList2 = new LinkedList<>();
nestedList2.add(1);
myList.add(nestedList2);
...etc...
现在,如果列表中必须包含不同类型的数据,则可以改为创建Object
列表。
在 Java 中,Object
是所有非基元类型继承的类型。因此,只要某物不是原始的,它就是Object
并且可以进入Object
列表 .这将允许您将任何类型的数据放入列表的元素中。使用Object
可以让你拥有一个所有相同类型的列表,如下所示:[Object, Object, Object, Object, Object]
.但是,现在 Java 不知道你实际存储在元素中的特定类型,所以你需要在获取它们时进行类型转换。
下面是一个使用java.util.List
的示例:
List<Object> myList = new LinkedList<>();
List<Integer> nestedList = new LinkedList<>();
nestedList.add(-1);
nestedList.add(0);
myList.add(nestedList);
myList.add(1);
myList.add("a string");
// You need to cast when taking elements out of the list.
List<Integer> newNest = (List<Integer>) myList.get(0);
Integer myInt = (Integer) myList.get(1);
String myString = (String) myList.get(2);
由于所有基本数据类型都是相同的(Integer
/int
(,我建议避免使用Object
列表方法并使用2D列表。它更简单,更不容易出错,不做所有这些铸造。