Java 向ArrayList添加多个BigInteger值

Java 向ArrayList添加多个BigInteger值,java,arrays,arraylist,Java,Arrays,Arraylist,我想将多个biginger值添加到ArrayList。我所发现的只是重复添加单个值的示例,每个值都用自己的代码行表示。我在找像这样的东西 ArrayList<BigInteger> array = {bigInt1, bigInt2, bigInt3}; ArrayList数组={bigInt1,bigInt2,bigInt3}; 而是: ArrayList<BigInteger> array = new ArrayList<BigInteger>();

我想将多个
biginger
值添加到
ArrayList
。我所发现的只是重复添加单个值的示例,每个值都用自己的代码行表示。我在找像这样的东西

ArrayList<BigInteger> array = {bigInt1, bigInt2, bigInt3};
ArrayList数组={bigInt1,bigInt2,bigInt3};
而是:

ArrayList<BigInteger> array = new ArrayList<BigInteger>();
array.add(bigInt1);
array.add(bigInt2);
array.add(bigInt3);
ArrayList数组=新的ArrayList();
add(bigInt1);
add(bigInt2);
add(bigInt3);

不添加一个元素/行或使用for循环就可以完成吗?

我真的不确定您要的是什么。你有四种选择:

1.单独添加项目 实例化一个具体的
列表
类型,然后为每个项目调用
add()

List<BigInteger> list = new ArrayList<BigInteger>();
list.add(new BigInteger("12345"));
list.add(new BigInteger("23456"));
我建议不要这样做。实际上,您在这里所做的是子类化
ArrayList
,这(imho)不是一个好主意。这类事情会破坏
比较器
s、
equals()
方法等等

3.使用
Arrays.asList()
另一种方法:

List<BigInteger> list = new ArrayList<BigInteger>(Arrays.asList(
  new BigInteger("12345"),
  new BigInteger("23456")
));
我喜欢以上两种方法中的一种

4. <代码>集合文字(Java 7+) 假设在Java 7中继续,您将能够做到:

List<BigInteger> list = [new BigInteger("12345"), new BigInteger("23456")];
List List=[new BigInteger(“12345”)、new BigInteger(“23456”)];
就目前情况而言,我认为这一功能尚未得到确认

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

Arrays.asList(new BigInteger("1"), new BigInteger("2"), new BigInteger("3"), new BigInteger("4"));
您可能会创建一个方法,在给定字符串的情况下返回一个新的BigInteger,称为类似bi(..)的东西,以减小此行的大小

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

其中BigIntegerArrays是一个自定义类,它执行您需要它执行的操作。如果您经常这样做,这会有所帮助。这里没有火箭科学-ArrayList BigIntegerArrays.asList(Integer…args)将使用FOR循环。

如果使用第三方库是一种选择,那么我建议使用Google的:


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

这可以通过一两个助手函数轻松完成:

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;
    }
}
import java.util.*;
导入java.math.biginger;
课例{
公共静态void main(字符串[]args){
ArrayList数组=新的原始列表(
1, 2, 3, 4, 5,
0xF,
"1039842034890394",
6L,
新的BigInteger(“ffff”,16)
);
// [1, 2, 3, 4, 5, 15, 1039842034890394, 6, 65535]
System.out.println(数组);
}
公共静态void fillBigIntList(列表、对象…编号){
用于(对象n:数字){
if(n instanceof biginger)list.add((biginger)n);
else if(n instanceof String)list.add(new biginger((String)n));
else if(长n个实例| |整数n个实例)
添加(biginger.valueOf(((Number)n.longValue());
else抛出新的IllegalArgumentException();
}
}
publicstaticarraylistnewbigintlist(对象…编号){
ArrayList list=新的ArrayList(number.length);
fillBigIntList(列表、编号);
退货清单;
}
}

@Die他添加了包装,以便于阅读;从技术上讲,这两种方法都是一对一的。后者是
List List=Arrays.asList(新的BigInteger(“12345”)、新的BigInteger(“23456”)哇,这些集合文字会很有用,这样人们就不会做太多的双括号初始化了。但它仍然不可用,甚至在JDK-8中也不可用。这只是Java中实现的方法。还有其他语言支持不太冗长的结构。事实上,你甚至不必走那么远:他们也有。为什么要否决投票?每个人都要揍他(在我看来,这不好。这与另一个问题相同,该问题的投票值为三位数……疯狂。这比我的解决方案要好:)
BigIntegerArrays.asList(1, 2, 3, 4);
List<BigInteger> of = Lists.newArrayList(bigInt1, bigInt2, bigInt3);
final List<BigInteger> of = ImmutableList.of(bigInt1, bigInt2, bigInt3);
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;
    }
}