Java 使用HashMap中的值构建对象数组
我的任务是为我的Data Structures类构建一个Huffman树,对文件中的字符串进行编码,但我遇到了一点麻烦。我知道如何构建树并对值进行编码,但我需要构建一个节点数组,然后将其放入排序列表中。 我编写了一个在节点数组长度上迭代的for循环,并嵌套了一个在HashMap上迭代的foreach循环。问题在于为每个角色创建每个新节点。我的代码似乎没有将所有的值添加到数组中,我尝试了多个不同的循环,但它们都会产生类似的结果。我有一个想法,创建两个数组,一个用于键,一个用于值,我可以将它们传递给节点构造函数,但这实际上不起作用 以下是节点的类:Java 使用HashMap中的值构建对象数组,java,Java,我的任务是为我的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中了。我只是不认为我的迭代是正确的,因为我的输出在每个索引中都是相同的字符和频率。请不要让您的实例字段具有公共访问权限。当我第一次开始编写程序时,我为了测试某些内容而切换了它们,但我忘记了将其切换回去