Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.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获取具有指定值的对象_Java_Data Structures_Hashtable - Fatal编程技术网

从哈希表Java获取具有指定值的对象

从哈希表Java获取具有指定值的对象,java,data-structures,hashtable,Java,Data Structures,Hashtable,我有一个带有(字符串,对象)的哈希表。我必须按键字符串的长度分隔所有对象,并创建一个长度相同的字符串数组数组。有人能指导我如何做到这一点吗? 到目前为止,我的代码是: Set<String> keys = words.keySet(); ArrayList<ArrayList<Word>> outer = new ArrayList<ArrayList<Word>>(); ArrayList<Word> inner = ne

我有一个带有(字符串,对象)的哈希表。我必须按键字符串的长度分隔所有对象,并创建一个长度相同的字符串数组数组。有人能指导我如何做到这一点吗? 到目前为止,我的代码是:

Set<String> keys = words.keySet();
ArrayList<ArrayList<Word>> outer = new ArrayList<ArrayList<Word>>();
ArrayList<Word> inner = new ArrayList<Word>();  

for(String key: keys) {
    for (int i=0; i< 15; i++) {
        if (key.length() == i) {
            inner.add(words.get(key));
        }
        outer.add(i, inner);
    }
}
Set keys=words.keySet();
ArrayList outer=新的ArrayList();
ArrayList内部=新的ArrayList();
用于(字符串键:键){
对于(int i=0;i<15;i++){
if(key.length()==i){
inner.add(words.get(key));
}
外部。添加(i,内部);
}
}

循环的方式效率低下,因为您可能没有很多特定大小的单词,因此您将不必要地根据每个长度的
i
检查每个单词的长度。您只需浏览一次单词列表,然后使用地图将单词与表示其长度的键相关联,然后在最后整理列表

试试这个:

Map<Integer, List<String>> sizeMap = new HashMap<>();

for (String key: keys) {
    int length = key.length();
    if (sizeMap.containsKey(length)) {
        // If we already have a list initialized, add the word
        List<String> mWords = sizeMap.get(length);
        mWords.add(key);
    } else {
        // Otherwise, add an empty list so later we don't try appending to null
        sizeMap.put(length, new ArrayList<>());
    }
}

// Convert the map to a list of lists
for (List<String> sizeGrouping : sizeMap.values()) {
    outer.add(sizeGrouping);
}
Map sizeMap=newhashmap();
用于(字符串键:键){
int length=key.length();
if(尺寸映射容器(长度)){
//如果我们已经初始化了一个列表,请添加单词
List mWords=sizeMap.get(长度);
添加(键);
}否则{
//否则,添加一个空列表,这样以后我们就不会尝试追加null
sizeMap.put(长度,new ArrayList());
}
}
//将地图转换为列表列表
对于(列表大小组合:sizeMap.values()){
外部。添加(大小组合);
}

最终输出中有多少实际阵列?你在这个问题上做过什么工作吗?有一个数组,里面有多个数组。那么问题到底是什么?你的问题得到了回答吗?