Java中的双精度浮点数ArrayList

18

有没有一种方法可以使用double类型定义一个ArrayList?我尝试了下面两种方式:

ArrayList list = new ArrayList<Double>(1.38, 2.56, 4.3);

ArrayList list = new ArrayList<double>(1.38, 2.56, 4.3);

第一段代码显示构造函数 ArrayList<Double>(double, double, double) 未定义,第二段代码显示在 double 后需要提供维度。

8个回答

30

试试这个:

List<Double> list = Arrays.asList(1.38, 2.56, 4.3);

该方法返回一个固定大小的列表。

如果你需要一个可扩展的列表,可以将该结果传递给ArrayList构造函数:

List<Double> list = new ArrayList<>(Arrays.asList(1.38, 2.56, 4.3));

2
Arrays.asList不返回一个不可修改的列表,而是返回一个固定大小的列表。您可以使用set方法来更改元素,但无法进行addremove操作。 - Jeffrey
@Jeffrey 感谢您的发帖!我从未意识到这一点...我一直以为它是不可修改的,因为当我尝试添加时它会崩溃。我从未尝试通过set进行修改。回答已更新。干杯。 - Bohemian
我不明白...能否给我一些解释,为什么@Rohan Salunkhe和voidHead的答案在这种情况下不是最好的选择? - Luke Burgess
@luke 可能是因为 Rohan 的答案是我的答案的一个完全复制(并且在我的答案之后发布),但没有任何解释,voidHead 的过度(在我看来不太优雅)的多行解决方案,而我的答案中的两种方法都是单行。 - Bohemian
谢谢,那个解释对我来说意义重大。我在Ubuntu上使用OpenJDK javac。 - Luke Burgess
显示剩余3条评论

4

试一下这个:

ArrayList<Double> numb= new ArrayList<Double>(Arrays.asList(1.38, 2.56, 4.3));

3

1) 我认为“过于复杂”是指先创建一个不可修改的List,然后再将其元素添加到ArrayList中。

2) 这个解决方案完全符合问题:“有没有一种方法定义一个双精度类型的ArrayList?”

双精度类型:

double[] arr = new double[] {1.38, 2.56, 4.3};

ArrayList:

ArrayList<Double> list = DoubleStream.of( arr ).boxed().collect(
    Collectors.toCollection( new Supplier<ArrayList<Double>>() {
      public ArrayList<Double> get() {
        return( new ArrayList<Double>() );
      }
    } ) );

这将创建与其Java 1.8短形式相同的紧凑且快速的编译:

ArrayList<Double> list = DoubleStream.of( arr ).boxed().collect(
    Collectors.toCollection( ArrayList::new ) );

3

您遇到了问题,因为您无法同时构建ArrayList并将其填充。您需要先创建它,然后手动填充如下:

ArrayList list = new ArrayList<Double>();
list.add(1.38);
...

或者,如果更方便的话,你可以使用包含你的值的基本数组来填充ArrayList。例如:

Double[] array = {1.38, 2.56, 4.3};
ArrayList<Double> list = new ArrayList<Double>(Arrays.asList(array));

2

您可以使用Arrays.asList获取某些列表(不一定是ArrayList),然后使用addAll()将其添加到ArrayList中:

new ArrayList<Double>().addAll(Arrays.asList(1.38L, 2.56L, 4.3L));

如果您正在使用Java6(或更高版本),您还可以使用ArrayList构造函数,该构造函数接受另一个列表作为参数:
new ArrayList<Double>(Arrays.asList(1.38L, 2.56L, 4.3L));

2
使用 guava 库。
Doubles.asList(1.2, 5.6, 10.1);

或者不可变列表
ImmutableList.of(1.2, 5.6, 10.1);

1
尝试这个:

 List<Double> l1= new ArrayList<Double>();
 l1.add(1.38);
 l1.add(2.56);
 l1.add(4.3);

-1
double[] arr = new double[] {1.38, 2.56, 4.3};

ArrayList<Double> list = DoubleStream.of( arr ).boxed().collect(
    Collectors.toCollection( new Supplier<ArrayList<Double>>() {
      public ArrayList<Double> get() {
        return( new ArrayList<Double>() );
      }
    } ) );

这个答案没有解释,而且似乎是一个不必要复杂的解决问题的方式。 - Laurenz Albe
欢迎来到SO,给你的答案添加一些解释总是一个好主意。 - f-CJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接