在c ++中我们可以有这样的向量:
vector < int > v[20];
我必须在c ++中用java创建等效的程序。我可以宣布
static ArrayList < ArrayList<Integer > > v;
但这不是我想要的。我希望它更直观。 我试图找到一种方法来轻松添加我的结构中的元素。 例如,如果我有一个图表并且我正在读取从a到b的道路,那么在C ++中只需使用v [a] .push_back(b)。
答案 0 :(得分:1)
首先,vector<int> v[20]
不是矢量的矢量。
其次ArrayList可能相当于Java中的std::vectors
。
vector.push_back
的一般等价物可能是这样的,即使用通用列表: -
List<Integer> x = new ArrayList<Integer>();
x.add(1);
答案 1 :(得分:1)
List<Integer>[] v = (List<Integer>[]) Array.newInstance(Integer.class, 20);
{
for (int i = 0; i < v.length; ++i) {
v[i] = new ArrayList<>();
}
}
可悲的是,Java在这里并不是那么简洁或精心设计的。 Array.newInstance
适用于所有维度:int[][][]
为Array.newInstance(int.class, 10, 10, 10)
。因此它返回一个Object作为最小分母,并且需要被强制转换。
初始数组只包含空值,需要初始化。
的校正:强> 的
当然应该List.class
而不是Integer.class
。
答案 2 :(得分:1)
import java.util.Vector;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Vector<Integer>[] anArray = (Vector<Integer>[]) new Vector[100];
for(int i = 0; i < anArray.length; i++)
anArray[i] = new Vector<Integer>();
anArray[2].add(2);//....
}
}