HashMap如何只包含一个条目/对象?

pro*_*mer 12 java hashmap

我想HashMap只有一个键值对象.

我创建了以下内容HashMap:

    HashMap <Integer,String>DocsCollection = new HashMap <Integer,String>();
Run Code Online (Sandbox Code Playgroud)

在HashMap中,我想只有一个条目/对象.密钥类型是Integer.值类型是String.

例如= <1,"foo.txt">

每当我在文件中找到特定单词时,我都希望这样

  1. 增加键中的计数器

  2. 在值中添加新文件

例如,比方说,我在一家搜索单词"你好" DocsCollection,我要存储单词"你好"一词频率的每一次出场并连接所有的新文件到以前的值.

<3, "foo.txt的,hello.txt的,的test.txt">

3意味着我在三个文件中找到了"Hello"这个词.

并且Value由找到单词的文件组成

如果我使用方法put,则会在HashMap密钥更改的原因中创建一个新条目.它不稳定.它以"1"开头,但是当我第二次找到该字时,键增加然后put方法插入一个带有新键的新条目但是我想只有一个条目并修改密钥.可以这样做吗?我怎样才能在HashMap中只有一个对象并且每次都修改密钥?

   DocsCollection.put(2,"foo.txt,hello.txt"); 
Run Code Online (Sandbox Code Playgroud)

提前致谢

Nik*_*huk 23

试试这种方式:

DocsCollection = Collections.singletonMap(2, "foo.txt,hello.txt");
Run Code Online (Sandbox Code Playgroud)

此地图无法修改,如果你想这样做只是这样做:

DocsCollection = Collections.singletonMap(3, "foo.txt,hello.txt");
Run Code Online (Sandbox Code Playgroud)


hvg*_*des 6

地图方法可能不是最好的.问题是你正在改变你的关键价值.

请注意,最好只有一个List<String>,并且每次匹配单词时,只需将文件添加到列表中即可.您可以轻松获得计数list.size()

  • 对于60个条目,您可以复制列表三次并在每次添加元素时执行手推车,并且仍然花费很少的时间对您来说是瞬间显现的.有没有听说过Knuth关于优化的报价?你的瓶颈就是你对这些字符串所做的一切,而不是你如何存储它们(如果你想找到包含该字的所有文件,你仍然必须检查所有文件而不管你如何存储文件).为什么你认为它甚至可能开始重要? (5认同)

Boz*_*zho 5

我会尝试为我认为你的任务提出一些不同的解决方案:

  • 你有话语(hello等)
  • 你想要计算它找到多少文件
  • 你想知道文件

您可以使用MultiMap(番石榴):

  • map.put("hello", "file1.txt"); map.put("hello", "file2.txt");
  • map.keys().count("hello") - 获取每个单词的找到次数
  • map.get("hello")返回Collection<String>包含该单词的所有文件

你可以在那张地图中拥有尽可能多的单词.如果你需要每个地图一个条目,你需要X字的X地图.

  • 如果他在搜索多个单词,这是一个很好的解决方案.但总的来说,List或数组会做...... (2认同)