我应该创建一个HashMap内部的另一个HashMap,如下所示,它可以HashMap根据HashMap运行时外部的键将值存储在内部
即程序所需的输出应为格式
{ 1 = {11 = "aaa",15 = "bbb"}, 2 = {13 = "ccc", 14 = "ddd"} }
Run Code Online (Sandbox Code Playgroud)
其中1,2是外部HashMap的键值.
以下是为其提供的代码是否有更好的方法来提高性能
HashMap<Integer, HashMap<Integer, String>>Outer
= new HashMap<Integer, HashMap<Integer,String>>();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
for(int i =0;i<count;i++)
{
String input[] = br.readLine().split("\\s");
//HashMap<Integer,String>inner = new HashMap<Integer, String>();
int key = Integer.parseInt(input[0]);
if(Outer.isEmpty() || !Outer.containsKey(key))
{
HashMap<Integer, String> inner = new HashMap<Integer, String>();
inner.put(Integer.parseInt(input[1]),input[2]);
Outer.put(key, inner);
}
else if(Outer.containsKey(key))
{
HashMap<Integer, String> inner = (HashMap<Integer, String>) Outer.get(key).clone();
inner.put(Integer.parseInt(input[1]), input[2]);
Outer.put(key, inner);
}
}
Run Code Online (Sandbox Code Playgroud)
到瓦迪姆的答案相似,但进一步改善-因为它不要求双方通话containsKey,以及get:
Map<Integer, Map<Integer, String>> outer = new HashMap<Integer, Map<Integer, String>>();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
Pattern splitter = Pattern.compile("\\s");
for(int i = 0; i < count; i++){
String input[] = splitter.split(br.readLine());
int key = Integer.parseInt(input[0]);
Map<Integer, String> inner = outer.get(key);
if(inner == null){
inner = new HashMap<Integer, String>();
outer.put(key, inner);
}
inner.put(Integer.parseInt(input[1]), input[2]);
}
Run Code Online (Sandbox Code Playgroud)
它还对命名约定和使用 Collections 接口而不是具体类型进行了一些小的改进。
我还删除了对clone. 这可能是一点点节省 - 我认为它不会给你预期的结果。
最后 - 我改变的另一件事可能是一个轻微的改进是使用预编译模式将您的字符串拆分为字段。
| 归档时间: |
|
| 查看次数: |
20181 次 |
| 最近记录: |