Java多维多类型数组(映射/列表/集合)?
我们有这样的声明:Java多维多类型数组(映射/列表/集合)?,java,list,multidimensional-array,Java,List,Multidimensional Array,我们有这样的声明: ArrayList参数集=新建ArrayList() 也许可以这样定义它(我知道,这是错误的,请将其视为伪代码): 列表参数集=新建 我很确定,有更好的方法来定义这样一个二维多类型“数组”。使用标准Java Collection API,您基本上可以做两件事: 在声明中使用List而不是ArrayList:List parameterSet=new ArrayList() 使用菱形运算符(如果您使用的是Java 7+):List parameterSet=new ArrayL
ArrayList参数集=新建ArrayList()代码>
也许可以这样定义它(我知道,这是错误的,请将其视为伪代码):
列表参数集=新建代码>
我很确定,有更好的方法来定义这样一个二维多类型“数组”。使用标准Java Collection API,您基本上可以做两件事:
在声明中使用List
而不是ArrayList
:List parameterSet=new ArrayList()代码>
使用菱形运算符(如果您使用的是Java 7+):List parameterSet=new ArrayList()代码>
但是,在这种情况下,我会考虑定义一个封装复杂数据结构的类(map map)。
这里的问题不是维度而是“多类型”。
要么为元素找到一个通用的超类型(最后一种方法总是对象
),要么创建一个包装类,该类可以容纳您需要的任何类型
List<Object>
更精确的是包装器类
public class Wrapper<T> {
private T data;
// constructors can be nice
public Wrapper(Float f){this.data=f;}
public Wrapper(Double d){this.data=d;}
public Wrapper(String s){this.data=s;}
public void setData(T newData) {
data = newData;
}
public T getData() {
return data;
}
// you can add convenience methods to find out what type your wrapper holds
public boolean isString(){
return this.data instanceof String; // for example
}
// and also convenience methods to "cast" your data
public Float asFloat(){
return (Float) this.data;
}
}
List<Wrapper> list = new ArrayList<>();
list.add(new Wrapper<Float>(1.2f));
Thx,看起来不错,但也“复杂”。我希望有一个单线解决方案。尽管如此,我们似乎必须走这条路。你说得对,这远非一条航线。但至少你可以把“复杂”的东西放在一个地方。嗯,这不是真正的问题。。还是我没有正确理解你的答案?我正在寻找一个没有第二张“地图”的解决方案。
List<Wrapper> list = new ArrayList<>();
list.add(new Wrapper<Float>(1.2f));
if(list.get(i).isFloat()){
Float f = list.get(i).asFloat();
}