JAVA:Hashmap-返回字符串的arraylist
我正在尝试编写一个方法,该方法将从HashMap返回字符串的ArrayList 目前,我有一个HashMap,其中包含一个字符串作为标识符(key?),还有一个String类型列表,其中包含与之关联的所有值。该程序旨在模拟火车/地铁导航工具,因此第一个字符串是车站名称,arraylist是一系列显示所有连接车站的字符串 这是我到目前为止所拥有的,但它目前不会编译。我知道还有几种其他的方法可以使用,所以我只列出了最后一种我遇到困难的方法(JAVA:Hashmap-返回字符串的arraylist,java,string,map,arraylist,hashmap,Java,String,Map,Arraylist,Hashmap,我正在尝试编写一个方法,该方法将从HashMap返回字符串的ArrayList 目前,我有一个HashMap,其中包含一个字符串作为标识符(key?),还有一个String类型列表,其中包含与之关联的所有值。该程序旨在模拟火车/地铁导航工具,因此第一个字符串是车站名称,arraylist是一系列显示所有连接车站的字符串 这是我到目前为止所拥有的,但它目前不会编译。我知道还有几种其他的方法可以使用,所以我只列出了最后一种我遇到困难的方法(getConnections) 我是这方面的新手,所以如果有
getConnections
)
我是这方面的新手,所以如果有人能指出我哪里出了问题,我会非常感激
public class MyNetwork implements Network {
Map<String, List<String>> stations = new HashMap<>();
@Override
public String[] getConnections(String fromStation) {
/**
* Get a list of all stations directly connected to a given station.
*
* @pre fromStation has been added to the network by the method
* addStation.
* @param fromStation
* @return A list of all the stations to which there is a direct
* connection from fromStation.
*/
ArrayList<String> Connections = new ArrayList<>();
Set<String> keys = stations.keySet();
for (String k : keys) {
String keyValue;
keyValue = (stations.get(fromStation));
}
return fromStation;
}
公共类MyNetwork实现网络{
Map stations=new HashMap();
@凌驾
公共字符串[]getConnections(来自Station的字符串){
/**
*获取直接连接到给定站点的所有站点的列表。
*
*@pre-fromStation已通过该方法添加到网络中
*addStation。
*@param fromStation
*@返回有直达电话的所有电台的列表
*从车站接过来。
*/
ArrayList Connections=新建ArrayList();
设置键=站。键集();
用于(字符串k:键){
字符串键值;
keyValue=(stations.get(fromStation));
}
从车站返回;
}
无需显式迭代映射中的值,只需使用内置方法即可。整个getConnections()
实现可以写在一行中:
return stations.get(fromStation).toArray(new String[0]);
工作原理:
- 首先,我们使用
get()
- 上一步返回一个
列表
- 现在,我们只需要使用
toArray()
将其转换为String[]
。为了类型安全,我们传递了一个预期返回类型的数组
或者,您也可以将返回类型更改为列表
,除非严格必要,否则无需将列表
转换为数组;如果您决定这样做,toArray()
调用将是不必要的。感谢奥斯卡的解释,真的很有帮助!我有一些建议,也许我最好使用多重映射作为代码的基础,而不是哈希映射。您的解决方案是否也适用于此,或者它是否非常依赖于我的重新实现?我很高兴!什么你已经实现的确实是一个多重映射。如果它在工作,我就不去管它了,但是有一些现有的实现,例如在或中定义的接口和具体类。我的解决方案可能需要或可能不需要进行调整,以使用那些依赖于实现的。检查它们,看看它们是否合适;)因此在与在,这行代码(应该返回一个数组,其中包含现在作为字符串添加到网络中的所有站)似乎不起作用?编译器似乎不喜欢将此信息传递到新数组?在将值添加到新数组之前,是否必须将其转换为字符串?public string[]getStations(){return stations.toArray(新字符串[0]);