正确使用ArrayList

时间:2012-06-14 19:17:55

标签: java arraylist

我正在参加斯坦福大学的CS106A课程,其中一项任务是建立某些城市之间的航班数据库。我为一个城市写了一个类但是第一次调用addDestination方法时工作,当添加第二个目标时,ArrayList最终为空。为什么?这个人真的让我。

import java.util.*;
    //class for a city. destinations are stored in an ArrayList
public class City {

    //Constructor
public City(String name){
    CityName = name;
}

//returns the name of the city
public String getName(){
    return CityName;
}
    // takes in a destination and adds it to the ArrayList unless
    //the destination already exists in which case it returns false.
public boolean addDestination(String destination){
    if (destinations.indexOf(destination)==-1){
        destinations.add(destination);
        return true;
    }
    else return false;
}

public Iterator<String> destIter(){
    Iterator<String> it =destinations.iterator();
    return it;
}

private ArrayList<String> destinations = new ArrayList<String>();
private String CityName;
}

这是创建城市数据库的代码。 hm是一个HashMap,它会读取一个txt文件,其中每一行都是“San Francisco - &gt; New York”

BufferedReader rd = new BufferedReader(new FileReader(FileName));
     String line = "";
     while (line!=null){
        if (line.indexOf("->")!=-1){
            String From = line.substring(0, line.indexOf("->")-1);
            String To = line.substring(line.indexOf('>')+2);
            City city = new City(From);
            if (hm.containsKey(From)==false)hm.put(From, city);
            hm.get(From).addDestination(To);

        }   
        line = rd.readLine();
    }

3 个答案:

答案 0 :(得分:0)

城市包含目的地?我认为所有这一切都发生在因为行private ArrayList<String> destinations = new ArrayList<String>,你为城市实例创建了一个成员,而不是类城市,所以这意味着每个实例都有一个arraylist,但你只需要一个arraylist将所有目的地放在一起,它是空的,因为它是你创建的第二个城市的arraylsit

更具体地说,我需要看到你的主要方法,以确定它是否真的如此。

答案 1 :(得分:0)

除了将实例变量放在最上面之外,你的代码对我有效。

答案 2 :(得分:0)

我不确定为什么您的城市目的地列表为空。我调试了你的逐字代码,它对我有用。

仔细检查以确保您没有从city检查目的地,只检查hm.get(From)。如果您有一个已经找到的城市,那么您正在创建一个您最不会再次引用的城市。

效率稍高的while - 块可能如下所示:

while (line != null) {
    if (line.indexOf("->") != -1) {
        String From = line.substring(0, line.indexOf("->")-1);
        String To = line.substring(line.indexOf('>')+2);

        if (! hm.containsKey(From)) {
            hm.put(From, new City(From));
        }
        hm.get(From).addDestination(To);
    }
}