在使用ArrayList时,我有点新鲜。我知道如何使用字符串创建一个ArrayList,我知道如何用Integers创建一个。我想知道,我如何创建一个包含两种类型的ArrayList,例如Doubles和Chars(但没有别的)。
这就是我所拥有的,
ArrayList<double && char> DCList = new ArrayList<double && char>();
显然它不是有效的Java代码,所以我的问题是,我该如何正确表达它?
答案 0 :(得分:6)
以下是您的一些事实:
您不能将原始值放入集合中(泛型类型只能绑定到引用类型)
如果您需要同时考虑上述各点char
和double
(或Characters
和Doubles
),您需要申报包含Character
和Double
的最不常见子类型的列表Object
:
List<Object> charsAndDoubles = new ArrayList<Object>();
然而不会禁止字符串和整数。
以下是我将如何解决它:
class MyDatatype {
....
}
class MyDatatypeCharVariant extends MyDatatype {
char data;
...
}
class MyDatatypeDoubleVariant extends MyDatatype {
double data;
...
}
然后将列表声明为:
List<MyDatatype> someList = new ArrayList<MyDatatype>();
答案 1 :(得分:1)
您无法在Arraylist
中混合使用类型。如果您需要不同的类型,则必须使用通用类型Object
。
ArrayList<Object> DCList = new ArrayList<Object>();
你不能在像int
或double
这样的Arraylist中使用原始类型。使用Integer
和Double
。
答案 2 :(得分:0)
public class Pair<T1, T2> {
...
}
ArrayList<Pair<Double, Character>> DCList = new ArrayList<Pair<Double, Character>>();
我将把Pair类的实现留给你。
在许多情况下,您可能会有描述要存储的内容的类,即
public class FooItem {
private double doubleThing;
private char charThing;
public double getDoubleThing() { return doubleThing; }
public char getCharThing() { return charThing; }
...
}
然后只需使用
ArrayList<FooItem>
答案 3 :(得分:0)
如何使用布尔值和字符创建数组列表,而不是字符串或整数?
使用静态类型无法做到这一点。 Java类型系统不允许它。
您可以做的最好的事情是实现一个List<Object>
类来检查它放入列表的元素的类型。 (您可以扩展ArrayList<Object>
并覆盖添加或修改列表元素的方法。)
汤姆的答案是实现这一目标的另一种方式,代价是每个列表元素的额外包装器对象。这样就无需在提取时进行类型转换,但您可以通过将getInt(pos)和getChar(pos)方法添加到自定义列表类来实现。
答案 4 :(得分:0)
正如Mitch所说,这种语法不起作用你可能会创建一个名为Either的泛型类型,这是我过去曾经使用过的几次。
class Either<LEFT,RIGHT> {
LEFT left;
RIGHT right;
public Either(LEFT left, RIGHT right) {
if (left != null && right != null) {
throw new IllegalStateException();
}
}
public LEFT getLeft() {
return left;
}
public boolean isLeft() {
return left != null;
}
public RIGHT getRight() {
return right;
}
public boolean isRight() {
return right != null;
}
}
List<Either<Double,Char>> list = new ArrayList<Either<Double,Char>>();
尽管这是正确的做法,但这种情况非常罕见。