通过HashMap的Java迭代

通过HashMap的Java迭代,java,Java,我正在努力使用javaHashMap。我想将translationList作为带字符串的数组返回。示例:word:“已翻译的单词” Mainclass: public static void main(String[] args) { Dictionary dictionary = new Dictionary(); dictionary.add("apina", "monkey"); dictionary.add("banaani", "banana"); di

我正在努力使用java
HashMap
。我想将
translationList
作为带字符串的数组返回。示例:
word:“已翻译的单词”

Main
class:

public static void main(String[] args) {
    Dictionary dictionary = new Dictionary();
    dictionary.add("apina", "monkey");
    dictionary.add("banaani", "banana");
    dictionary.add("cembalo", "harpsichord");

    ArrayList<String> translations = dictionary.translationList();
    for(String translation: translations) {
        System.out.println(translation);
    }
}
private HashMap<String, String> dictionary = new HashMap<String, String>();
public Dictionary(){};
public String translate(String word){
    if(dictionary.containsKey(word)){
        return dictionary.get(word);
    }
    return null;
}
public void add(String word, String translation){
    dictionary.put(word,translation);
}
public int amountOfWords() {
    return dictionary.size();
}
public ArrayList<String> translationList(){
    for ( String key : dictionary.keySet() ) {
        if(translationList().size()<dictionary.size()){
            translationList().add(key+" = "+dictionary.get(key));
        }
    }
    return translationList();
}
Java返回:

Exception in thread "main" java.lang.StackOverflowError
at java.base/java.util.HashMap$KeyIterator.<init>(HashMap.java:1515)
at java.base/java.util.HashMap$KeySet.iterator(HashMap.java:917)
at Dictionary.translationList(Dictionary.java:21)
at Dictionary.translationList(Dictionary.java:22)
线程“main”java.lang.StackOverflower中出现异常 位于java.base/java.util.HashMap$KeyIterator(HashMap.java:1515) 位于java.base/java.util.HashMap$KeySet.iterator(HashMap.java:917) 位于Dictionary.translationList(Dictionary.java:21) 位于Dictionary.translationList(Dictionary.java:22)
感谢您的帮助:)

您的
translationList
方法正在调用自身,导致无限递归调用和
stackoverflowerrror

您可能打算写以下内容:

public List<String> translationList(){
    List<String> list = new ArrayList<>();
    for ( String key : dictionary.keySet() ) {
        list.add(key+" = "+dictionary.get(key));
    }
    return list;
}
public ArrayList<String> translationList(){
    List<String> translationList = new ArrayList<>();
    for ( String key : dictionary.keySet() ) {
        if(translationList().size()<dictionary.size()){
            translationList.add(key+" = "+dictionary.get(key));
        }
    }
    return translationList();
}
public List translationList(){
列表=新的ArrayList();
for(字符串键:dictionary.keySet()){
list.add(key+“=”+dictionary.get(key));
}
退货清单;
}

public List translationList(){
列表=新的ArrayList();
for(Map.Entry:dictionary.entrySet()){
list.add(entry.getKey()+“=”+entry.getValue());
}
退货清单;
}

您必须首先创建一个
ArrayList
,然后向其中添加
String
s。除此之外,
if(translationList().size()您的
translationList
方法正在调用自身,导致无限递归调用和
StackOverflowError

您可能打算写以下内容:

public List<String> translationList(){
    List<String> list = new ArrayList<>();
    for ( String key : dictionary.keySet() ) {
        list.add(key+" = "+dictionary.get(key));
    }
    return list;
}
public ArrayList<String> translationList(){
    List<String> translationList = new ArrayList<>();
    for ( String key : dictionary.keySet() ) {
        if(translationList().size()<dictionary.size()){
            translationList.add(key+" = "+dictionary.get(key));
        }
    }
    return translationList();
}
public List translationList(){
列表=新的ArrayList();
for(字符串键:dictionary.keySet()){
list.add(key+“=”+dictionary.get(key));
}
退货清单;
}

public List translationList(){
列表=新的ArrayList();
for(Map.Entry:dictionary.entrySet()){
list.add(entry.getKey()+“=”+entry.getValue());
}
退货清单;
}

您必须首先创建一个
数组列表
,然后向其中添加
字符串
s。除此之外,
if(translationList().size()您正在使用
return translationList();
进行递归调用。这可能是偶然的。您的代码可能看起来像:

public List<String> translationList(){
    List<String> list = new ArrayList<>();
    for ( String key : dictionary.keySet() ) {
        list.add(key+" = "+dictionary.get(key));
    }
    return list;
}
public ArrayList<String> translationList(){
    List<String> translationList = new ArrayList<>();
    for ( String key : dictionary.keySet() ) {
        if(translationList().size()<dictionary.size()){
            translationList.add(key+" = "+dictionary.get(key));
        }
    }
    return translationList();
}
public ArrayList translationList(){
List translationList=新建ArrayList();
for(字符串键:dictionary.keySet()){
if(translationList().size()entry.getKey()+“=”+entry.getValue())
.collect(Collectors.toList());
}

您正在使用
return translationList();
进行递归调用。这可能是偶然的。您的代码可能看起来像:

public List<String> translationList(){
    List<String> list = new ArrayList<>();
    for ( String key : dictionary.keySet() ) {
        list.add(key+" = "+dictionary.get(key));
    }
    return list;
}
public ArrayList<String> translationList(){
    List<String> translationList = new ArrayList<>();
    for ( String key : dictionary.keySet() ) {
        if(translationList().size()<dictionary.size()){
            translationList.add(key+" = "+dictionary.get(key));
        }
    }
    return translationList();
}
public ArrayList translationList(){
List translationList=新建ArrayList();
for(字符串键:dictionary.keySet()){
if(translationList().size()entry.getKey()+“=”+entry.getValue())
.collect(Collectors.toList());
}

您正在调用您的
translationList()
方法,而不是创建一个实际的列表并添加到其中。为什么?如果下次包含可运行的代码,(带有导入和类结构),帮助会更快:)您正在调用
translationList()
方法,而不是创建一个实际的列表并添加到其中。为什么?如果下次包含可运行的代码,(带有导入和类结构),帮助会更快:)