【发布时间】:2014-03-14 02:51:36
【问题描述】:
我很难理解我正在尝试实现的哈希图。基本前提是我在 txt 文件中有一个站点列表,每个站点之间都有“连接”。类似的东西;
连接:Station1 Station2
连接:Station4 Station6
我有几种方法,它们会将站点名称添加为字符串,然后将其“已连接”站点存储在一个数组列表中,然后我可以稍后检索它以显示“站点 4:已连接到站点 6”等等。
下面我关心的两种方法是“添加站”和“添加连接”的方法 我已经设置了它,所以 Hashmap“站”应该包含一个 String > Arraylist 关系。我的想法是“字符串”将存储电台名称,然后数组列表“connectedstations”将存储它连接到的所有电台,我只是不知道如何创建关联?我在使用 Key 之前写过一些,但我似乎无法在这里工作!
任何帮助将不胜感激!谢谢
public class MyNetwork implements Network {
//The Hashmap of type String, Arraylist. The String holding the
//station name, and the arraylist holding the stations connected to it
HashMap<String, ArrayList> stations = new HashMap<>();
//the arraylist to hold the connected stations
ArrayList<String> connectedstations = new ArrayList<>();
@Override
public void addStation(String station) {
//adds a station to the hashmap, pointing to a CURRENTLY empty
//arraylist "connectedstations"
stations.put(station,connectedstations);
}
@Override
public void addConnection(String fromStation, String toStation) {
/**
* Add a direct connection from one station to another.
* @pre both fromStation and toStation have already been added by the method
* addStation.
* @param fromStation The station from which the connection begins.
* @param toStation The station at which the connection ends.
*/
}
【问题讨论】:
-
我看到这么多固执的人试图创建列表而不是创建对象,他们为弄清逻辑而绞尽脑汁花了好几个小时。然后,如果您需要更换一件,则必须更换所有件。只需创建一个包含 Station 对象列表的 Connection 对象,您的生活就会变得如此轻松。
-
@John:在这种情况下,逻辑仍然是完全相同的:您仍然需要从地图中获取 Connection 对象(而不是 List),并向其中添加一个站点(而不是将其添加到列表中)。将站点列表命名为“连接”对我来说看起来更加混乱。地图中应该作为值的是一个 Station 对象,具有一个 name 属性和一个连接的站点列表。并且逻辑仍然是相同的。
-
@JBNizet 你误解了我的评论。一个连接不是一个站列表。一个连接有一个站列表。我从未声称逻辑会改变。我声称逻辑会更容易理解和维护。例如,如果 Station 无法连接到自身,您可以使用
this引用进行检查。您可以将类似的约束添加到 Object,而不是尝试对列表施加限制。我意识到“更容易理解”是主观的,这就是为什么我把我的评论作为一个简单的评论。 -
但是连接不应该有电台列表。连接是源站和目标站之间的链接。我同意你的观点,但我的观点是,将包含站点列表的对象命名为“连接”比简单地使用列表更令人困惑。正如我所说,地图中应该是一个 Station 对象,带有名称和连接的站点列表,实际上,还有允许检查约束的方法。
-
@JBNizet 连接就是链接。一个连接有两个端点。我知道您认为这太令人困惑了,但事实并非如此。
标签: java arrays arraylist hashmap keyset