Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 包含hashmap键中的操作_Java_Hashmap - Fatal编程技术网

Java 包含hashmap键中的操作

Java 包含hashmap键中的操作,java,hashmap,Java,Hashmap,“我的hashmap”包含以下两个条目之一:**key:它来自另一个站点的源站点@@noon**和**value:它来自另一个站点的@@ADJ源站点@@noon** 我只想根据“”的关键部分从另一个站点获取该密钥的值“`` 如果hashmap包含类似于“它从另一个站点起源的站点”的键,那么它应该首先选择“它的站点”,然后选择“从另一个站点起源的站点”,而不是“@@”后面的部分。否。它将是一个字符串,因此它也会选择“@@”后面的任何内容。如果需要基于子字符串的值,则必须在映射上迭代,如下所示: S

“我的hashmap”包含以下两个条目之一:
**key:它来自另一个站点的源站点@@noon**和**value:它来自另一个站点的@@ADJ源站点@@noon**

我只想根据“”的关键部分从另一个站点获取该密钥的值“``


如果hashmap包含类似于“它从另一个站点起源的站点”的键,那么它应该首先选择“它的站点”,然后选择“从另一个站点起源的站点”,而不是“@@”后面的部分。

否。它将是一个字符串,因此它也会选择“@@”后面的任何内容。如果需要基于子字符串的值,则必须在映射上迭代,如下所示:

String value = map.get("its...");
if (value  != null) {
    //exact match for value
    //use it
} else {//or use map or map which will reduce your search time but increase complexity
    for (Map.Entry<String, String> entry : map.entrySet()) {
        if (entry.getKey().startsWith("its...")) {
            //that's the value i needed.
        }
    }
}
String value=map.get(“its…”);
if(值!=null){
//价值的精确匹配
//使用它
}否则{//或使用map或map,这将减少搜索时间但增加复杂性
对于(Map.Entry:Map.entrySet()){
if(entry.getKey().startsWith(“its…”)){
//这就是我需要的价值。
}
}
}
<代码> > p>您可以考虑使用。它是一种类似于
TreeMap
的数据结构,其中键是
字符串和任何类型的值。对于存储来说,这是一种最佳选择,因为键之间的公共字符串前缀是共享的,但是对于您的用例来说,有趣的特性是您可以搜索特定的前缀并获得地图条目的排序视图

下面是一个实现示例

import org.apache.commons.collections4.trie.PatriciaTrie;

public class TrieStuff {

    public static void main(String[] args) {
        // Build a Trie with String values (keys are always strings...)
        PatriciaTrie<String> pat = new PatriciaTrie<>();

        // put some key/value stuff with common prefixes
        Random rnd = new Random();
        String[] prefix = {"foo", "bar", "foobar", "fiz", "buz", "fizbuz"};
        for (int i = 0; i < 100; i++) {
            int r = rnd.nextInt(6);
            String key = String.format("%s-%03d@@whatever", prefix[r], i);
            String value = String.format("%s@@ADJ %03d@@whatever", prefix[r], i);
            pat.put(key, value);
        }

        // Search for all entries whose keys start with "fiz"
        SortedMap<String, String> fiz = pat.prefixMap("fiz");
        fiz.entrySet().stream().forEach(e -> System.out.println(e));
    }
}

您需要一个hashmap的hashmap。@Real怀疑论者我只使用一个hashmap,在获取键值时,它应该像“Contains”函数或sql中的查询一样工作。您不能更改hashmap的工作方式。你需要改变实现——要么是线性扫描(这使得你的地图和数组一样糟糕),要么就是地图。你可以考虑使用<代码> TeeMePa/COD>。您可以搜索一个键值,然后从那里开始依次迭代。或者,OP可以创建一个
映射图
fiz-000@@whatever
fiz-002@@whatever
fiz-012@@whatever
fiz-024@@whatever
fiz-027@@whatever
fiz-033@@whatever
fiz-036@@whatever
fiz-037@@whatever
fiz-041@@whatever
fiz-045@@whatever
fiz-046@@whatever
fiz-047@@whatever
fizbuz-008@@whatever
fizbuz-011@@whatever
fizbuz-016@@whatever
fizbuz-021@@whatever
fizbuz-034@@whatever
fizbuz-038@@whatever