关于java:将多个BigInteger值添加到ArrayList

Adding multiple BigInteger values to an ArrayList

本问题已经有最佳答案,请猛点这里访问。

我想将多个BigInteger值添加到ArrayList中。我所发现的只是重复添加单个值的示例,每个值都在自己的代码行中表示。我在找类似的东西

1
ArrayList<BigInteger> array = {bigInt1, bigInt2, bigInt3};

相反,它是:

1
2
3
4
ArrayList<BigInteger> array = new ArrayList<BigInteger>();
array.add(bigInt1);
array.add(bigInt2);
array.add(bigInt3);

是否可以在不添加一个元素/行或使用for循环的情况下完成?


我不太确定你在找什么。您有四种选择:

1。单独添加项目

实例化一个具体的List类型,然后为每个项目调用add()

1
2
3
List<BigInteger> list = new ArrayList<BigInteger>();
list.add(new BigInteger("12345"));
list.add(new BigInteger("23456"));

2。子类具体的List类型(双括号初始化)

有些人可能会建议这样的双括号初始化:

1
2
3
4
List<BigInteger> list = new ArrayList<BigInteger>() {{
  add(new BigInteger("12345"));
  add(new BigInteger("23456"));
}};

我建议不要这样做。实际上,您在这里所做的是将ArrayList子类化,这(imho)不是一个好主意。这类事情会破坏Comparatorequals()等方法。

三。使用Arrays.asList()

另一种方法:

1
2
3
4
List<BigInteger> list = new ArrayList<BigInteger>(Arrays.asList(
  new BigInteger("12345"),
  new BigInteger("23456")
));

或者,如果您不需要ArrayList,只需:

1
2
3
4
List<BigInteger> list = Arrays.asList(
  new BigInteger("12345"),
  new BigInteger("23456")
);

我喜欢以上两种方法中的一种。

4。EDOCX1·8个字形(Java 7 +)

假设在Java 7中进行集合文字操作,您将能够做到这一点:

1
List<BigInteger> list = [new BigInteger("12345"), new BigInteger("23456")];

正如目前的情况,我不相信这个功能已经得到确认。

就是这样。这些是你的选择。挑一个。


1
BigIntegerArrays.asList(1, 2, 3, 4);

其中biginterrays是一个定制类,它可以完成您需要它做的事情。如果你经常这样做,这会有所帮助。这里没有火箭科学-arraylist biginterarrays.aslist(integer…args)将使用for循环。


1
Arrays.asList(new BigInteger("1"), new BigInteger("2"), new BigInteger("3"), new BigInteger("4"));

您可能会生成一个方法,该方法在给定一个字符串的情况下返回一个新的BigInteger,该字符串称为bi(..)以减小此行的大小。


如果使用第三方库是一种选择,那么我建议使用谷歌的guava中的Lists.newArrayList(E... elements)

1
List<BigInteger> of = Lists.newArrayList(bigInt1, bigInt2, bigInt3);

如果不需要易变性,则使用ImmutableList.of()的过载:

1
final List<BigInteger> of = ImmutableList.of(bigInt1, bigInt2, bigInt3);

这是一个非常优雅的解决方案。


这很容易通过一个或两个助手函数完成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.util.*;
import java.math.BigInteger;

class Example {
    public static void main(String[] args) {
        ArrayList<BigInteger> array = newBigIntList(
            1, 2, 3, 4, 5,
            0xF,
           "1039842034890394",
            6L,
            new BigInteger("ffff", 16)
        );

        // [1, 2, 3, 4, 5, 15, 1039842034890394, 6, 65535]
        System.out.println(array);
    }

    public static void fillBigIntList(List<BigInteger> list, Object... numbers) {
        for (Object n : numbers) {
            if (n instanceof BigInteger) list.add((BigInteger)n);
            else if (n instanceof String) list.add(new BigInteger((String)n));
            else if (n instanceof Long || n instanceof Integer)
                list.add(BigInteger.valueOf(((Number)n).longValue()));
            else throw new IllegalArgumentException();
        }
    }

    public static ArrayList<BigInteger> newBigIntList(Object... numbers) {
        ArrayList<BigInteger> list = new ArrayList<>(numbers.length);
        fillBigIntList(list, numbers);
        return list;
    }
}