哈夫曼编码解码思路
1、哈夫曼编码
首先创建一个哈夫曼树,以字符出现的次数为标准创建;使用List类存放所创建的节点,后面方便进行删除,获得哈夫曼树的根节点,用Map统计对应的字符出现的次数
class Node implements Comparable<Node> {
Byte data;
int weight;
Node left;
Node right;
public Node(Byte data, int weight) {
this.data = data;
this.weight = weight;
}
@Override
public int compareTo(Node o) {
return this.weight - o.weight;
}
public String toString() {
return "Node [data = " + data + " weight=" + weight + "]";
}
}
private static List<Node> getNodes(byte[] bytes){
List<Node> list=new ArrayList<>();
Map<Byte,Integer> counts=new HashMap<>();
for(byte b:bytes) {
Integer count = counts.get(b);
if(count==null) {
counts.put(b, 1);
}else {
counts.put(b, ++count);
}
}
for(Map.Entry<Byte, Integer> entry: counts.entrySet