我正在尝试创建一个邻接列表,并且为此,我需要创建一个链表的数组列表。当我这样做时,cityList的大小不会更改为在构造函数中传递的大小。我觉得这可能是由于阴影造成的,但是我不确定阴影如何起作用,或者这是怎么回事:
import java.util.*;
public class AdjList{
public ArrayList<EdgeList> cityList;
public AdjList(int size){
this.cityList = new ArrayList<EdgeList>(size+1);
}
public void add(int vertex, int edge, int distance, float price){
cityList.get(vertex).add(edge, distance, price);
}
}
在主要课程中,我这样做:
AdjList flights = new AdjList(numCities);
最佳答案
使用new ArrayList<EdgeList>(size+1);
创建列表时,size+1
是列表的初始容量,而不是其大小。在将元素添加到列表之前,大小将保持为0。
使用以下命令将EdgeList
元素添加到列表中:
cityList.get(vertex).add(edge, distance, price);
毫无意义,因为它迫使您使用
0
实例初始化从索引vertex
到EdgeList
的列表的所有元素。否则,cityList.get(vertex)
会引发异常。如果您希望能够通过元素的顶点访问元素,那么
Map<Integer,EdgeList>
可能是一个更好的结构:this.cityList = new HashMap<Integer,EdgeList>();
...
EdgeList el = new EdgeList();
cityList.put(vertex,el);
el.add(edge, distance, price);