Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
Java 如何设置项目列表的默认值?_Java - Fatal编程技术网

Java 如何设置项目列表的默认值?

Java 如何设置项目列表的默认值?,java,Java,我正在尝试将一些python代码转换为java,需要设置列表的默认值。我知道默认值,列表的大小,我的目标是设置一个默认值,然后在我的程序中更改它们。在python中,我只是这样做(创建10个值为零的项): 我正在努力做到: List<Integer> list1 = Arrays.asList(0*10); // it just multiples 0 by 10. List list1=Arrays.asList(0*10);//它只是0乘以10。 它确实有效,我知道我可以做这

我正在尝试将一些python代码转换为java,需要设置列表的默认值。我知道默认值,列表的大小,我的目标是设置一个默认值,然后在我的程序中更改它们。在python中,我只是这样做(创建10个值为零的项):

我正在努力做到:

List<Integer> list1 = Arrays.asList(0*10); // it just multiples 0 by 10.
List list1=Arrays.asList(0*10);//它只是0乘以10。
它确实有效,我知道我可以做这样的事情:

for(int i = 0;i<10;i++)
{
  list1.add(0); 
}

for(inti=0;i在Java中不是真的。在这类事情上,Java相对冗长,所以除了像您这样的循环之外,没有什么简单的事情可以做。

可以避免循环

Integer[] integers = new Integer[10];
Arrays.fill(integers, 0);
List<Integer> integerList = Arrays.asList(integers);
Integer[]integers=新整数[10];
数组。填充(整数,0);
List integerList=Arrays.asList(整数);

据我所知,标准库中没有内置任何内容。但您可以轻松地编写一次这样的方法,并在任何地方调用它。例如:

public static <T> List<T> newArrayList(T value, int size) {
    List<T> list = new ArrayList<T>(size);
    for (int i = 0; i < size; i++) {
        list.add(value);
    }
    return list;
}
公共静态列表newArrayList(T值,int大小){
列表=新的ArrayList(大小);
对于(int i=0;i
如果您永远不想更改列表的大小(即添加或删除元素),Mike Samuel的答案可能更有效。另外请注意,如果您使用的是可变类型,则可能无法获得所需的:

List<StringBuilder> list = newArrayList(new StringBuilder(), 10);
list.get(0).append("Foo");
System.out.println(list.get(5)); // Prints "Foo"
List List=newArrayList(newstringbuilder(),10);
list.get(0.append(“Foo”);
System.out.println(list.get(5));//打印“Foo”

…因为列表中的每个元素都是对同一对象的引用。

也许您只需要一个数组

int[] array = new int[10];
如果需要动态更改列表的大小,则需要列表。如果不需要此功能,数组可能适合您的需要,它会自动将所有值初始化为0。

您可以尝试:

List<Integer> list1 = Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
List list1=Arrays.asList(0,0,0,0,0,0,0,0);

有10个零。您需要知道编译时的元素数,但只有一行。如果您不知道编译时的元素数,则可以使用建议的array.fill()方法。

我坚持使用for循环

顺便说一句…0*10=0,所以只需输入您需要的金额即可

ArrayList list=new ArrayList(10);

如果您需要列表而不是数组,您可以选择使用列表:

List<Integer> list = Collections.nCopies(10, 0);
List=Collections.nCopies(10,0);
如果需要可变列表,请将其包装:

List<Integer> list = new ArrayList<>(Collections.nCopies(10, 0));
List List=newarraylist(Collections.nCopies(10,0));

如果您使用的是java 8或更高版本,则可以执行以下操作。以下是所需的导入:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;
下面是让它工作的代码

List<Integer> integers = new ArrayList() {{
      IntStream.range(0,5).forEach((i) ->  add(0));
}};
List integers=new ArrayList(){{
range(0,5).forEach((i)->add(0));
}};

双大括号不是一个错误,它们是必需的!我希望这有帮助。

你能用数组而不是列表吗?@MarkByers这其实没什么关系,但我读到列表的性能更好,因为大小是固定的,所以这就是我为什么要这样做的原因。我使用什么并不重要,尽管我正在学习,我只是想学习他为正确的任务提供了正确的工具。@learningJava:不,相反-数组的大小是固定的。但列表通常更灵活。@JonSkeet opps抱歉。我想我需要停止饮酒和学习java:-)请注意,该列表将是固定大小的-您不能添加或删除它。“这可能是我们想要的,也可能不是。”琼斯凯说得很对。我按照预期解释是因为“我知道默认值,列表的大小…”。这是正确的,这是一个固定的大小,这就是为什么我首先选择列表的原因。我有点困惑,我理解前两行,你制作了一个包含10个项目的列表,然后使用array.fill将其全部设置为零,为什么需要第三行?@learningJava,如果你想使用
列表
,那么第三行是必要的。数组和列表是不同的类型,您不能总是将数组与需要
List
s或
Collection
s的API一起使用,反之亦然,因为Java不像Python那样是“鸭型”的。如果您对数组满意,请注意
Integer[]
int[]
之间存在差异,后者通常更可取。@learningJava解释了Java中的集合与数组,以及为什么您可能希望使用一个而不是另一个。请不要让代码的维护者计算为0。注释不会有帮助,因为维护人员不能假设它们与代码一致。我真的很想避免这种情况。我很懒,不太喜欢打字。再加上我的数据是几千个零,所以如果我输入那么多,我可能会取消我的键盘保修:-)是的,对于更少的init值来说,这真是一个疯狂的尝试。我也不喜欢该代码。
list.size()
将返回0。不是10。从上面的答案可以看出,这是一个错误的陈述。请注意,上面的答案只不过是循环中的细微变化/抽象。这只适用于不可变对象,如果您需要n个副本是不同的对象。例如,nCopies(10,new HashSet())将填充引用同一HashSet对象的10个引用
List<Integer> integers = new ArrayList() {{
      IntStream.range(0,5).forEach((i) ->  add(0));
}};