Java 使用HashMap中的值构建对象数组

Java 使用HashMap中的值构建对象数组,java,Java,我的任务是为我的Data Structures类构建一个Huffman树,对文件中的字符串进行编码,但我遇到了一点麻烦。我知道如何构建树并对值进行编码,但我需要构建一个节点数组,然后将其放入排序列表中。 我编写了一个在节点数组长度上迭代的for循环,并嵌套了一个在HashMap上迭代的foreach循环。问题在于为每个角色创建每个新节点。我的代码似乎没有将所有的值添加到数组中,我尝试了多个不同的循环,但它们都会产生类似的结果。我有一个想法,创建两个数组,一个用于键,一个用于值,我可以将它们传递给

我的任务是为我的Data Structures类构建一个Huffman树,对文件中的字符串进行编码,但我遇到了一点麻烦。我知道如何构建树并对值进行编码,但我需要构建一个节点数组,然后将其放入排序列表中。 我编写了一个在节点数组长度上迭代的for循环,并嵌套了一个在HashMap上迭代的foreach循环。问题在于为每个角色创建每个新节点。我的代码似乎没有将所有的值添加到数组中,我尝试了多个不同的循环,但它们都会产生类似的结果。我有一个想法,创建两个数组,一个用于键,一个用于值,我可以将它们传递给节点构造函数,但这实际上不起作用

以下是节点的类:

public class HuffmanTreeNode {
    public char key;
    public int value;
    public HuffmanTreeNode nextNode = null;
    public HuffmanTreeNode leftChild = null;
    public HuffmanTreeNode rightChild = null;

    public HuffmanTreeNode(char k, int v) {
        key = k;
        value = v;
    }

    public HuffmanTreeNode(HuffmanTreeNode left, HuffmanTreeNode right) {
        leftChild = left;
        rightChild = right;

        value = rightChild.value + leftChild.value;
    }

    public boolean isLeaf() {
        if (leftChild == null && rightChild == null) {
            return true;
        }

        return false;
    }
}
以下是构建节点阵列的代码:

HashMap<Character, Integer> frequencies = new HashMap<Character, Integer>();
    for (String s : fileContents) {
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            Integer value = frequencies.get(new Character(c));

            if (value != null) {
                frequencies.put(c, new Integer(value + 1));
            } else {
                frequencies.put(c, 1);
            }
        }
    }

    char[] chars = new char[frequencies.size()];
    int[] freq = new int[frequencies.size()];

    for (int i = 0; i < frequencies.size(); i++) {
        for (HashMap.Entry<Character, Integer> entry : frequencies.entrySet()) {
            chars[i] = entry.getKey();
            freq[i] = entry.getValue();
        }
    }

    for (int i = 0; i < frequencies.size(); i++) {
        System.out.println(chars[i] + " " + freq[i]);
    }


    SortedList sortedList = new SortedList();
    HuffmanTreeNode[] nodes = new HuffmanTreeNode[frequencies.size()];

    for (int i = 0; i < nodes.length; i++) {
        nodes[i] = new HuffmanTreeNode(chars[i], freq[i]);
    }
HashMap frequencies=newhashmap();
for(字符串s:fileContents){
对于(int i=0;i
实际上,我只是通过更改循环来修复代码:

for (int i = 0; i < frequencies.size(); i++) {
    for (HashMap.Entry<Character, Integer> entry : frequencies.entrySet()) {
        chars[i] = entry.getKey();
        freq[i] = entry.getValue();
    }
}
for(int i=0;i
致:

int索引=0;
for(HashMap.Entry:frequencies.entrySet()){
chars[index]=entry.getKey();
freq[index]=entry.getValue();
索引++;
}

实际上,我只是通过更改循环来修复代码:

for (int i = 0; i < frequencies.size(); i++) {
    for (HashMap.Entry<Character, Integer> entry : frequencies.entrySet()) {
        chars[i] = entry.getKey();
        freq[i] = entry.getValue();
    }
}
for(int i=0;i
致:

int索引=0;
for(HashMap.Entry:frequencies.entrySet()){
chars[index]=entry.getKey();
freq[index]=entry.getValue();
索引++;
}

您能否通过一些示例输入和预期输出进一步澄清这个问题。因此,我的示例输入是一个字符串数组,其中包含正在读取的文件的内容(fileContents)。文件中有行Hello/how/are you(“/”表示新行-总共3行)。我需要得到的输出是每个字符以及它们出现的次数,这已经在HashMap中了。我只是不认为我的迭代是正确的,因为我的输出在每个索引上都是相同的字符和频率。请不要给你的实例字段公共访问权限。当我第一次开始编写程序时,我为了测试某个东西而切换了它们,但我忘记了将其切换回来。你能用一些示例输入和预期的内容进一步澄清这个问题吗因此,我的示例输入是一个字符串数组,其中包含正在读取的文件的内容(fileContents)。文件中有行Hello/how/are you(“/”表示新行-总共3行)。我需要得到的输出是每个字符以及它们出现的次数,这已经在HashMap中了。我只是不认为我的迭代是正确的,因为我的输出在每个索引中都是相同的字符和频率。请不要让您的实例字段具有公共访问权限。当我第一次开始编写程序时,我为了测试某些内容而切换了它们,但我忘记了将其切换回去