Приоритетные Очереди с деревом Хаффмана

я пытаюсь создать дерево Huffman путем чтения в файле, и считая частоту каждого символа пробела между знаками и т.д. я использую Priorityqueue для организации очередей объектов от самого маленького до самого большого, но когда я вставляю их в очередь, они не ставят в очередь правильно, вот мой код. Хаффман пакета;

импорт java.io. FileNotFoundException; импорт java.io. FileReader; импорт java.util. ArrayList; импорт java.util. PriorityQueue; импорт java.util. Сканер;

общедоступный класс Huffman {

public ArrayList<Frequency> fileReader(String file)
{
    ArrayList<Frequency> al = new ArrayList<Frequency>();
    Scanner s;
    try {

        s = new Scanner(new FileReader(file)).useDelimiter("");
        while (s.hasNext())
        {
            boolean found = false;
            int i = 0;
            String temp = s.next();
            while(!found)
            {


                if(al.size() == i && !found)
                {
                    found = true;
                    al.add(new Frequency(temp, 1));
                }
                else if(temp.equals(al.get(i).getString()))
                {
                    int tempNum = al.get(i).getFreq() + 1;
                    al.get(i).setFreq(tempNum);
                    found = true;
                }
                i++;

            }



        }
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return al;
}
public void buildTree(ArrayList<Frequency> al)
{
    PriorityQueue<Frequency> pq = new PriorityQueue<Frequency>();
    for(int i = 0; i < al.size(); i++)
    {
        pq.add(al.get(i));          
    }
    while(pq.size() > 0)
    {
        System.out.println(pq.remove().getString());
    }
}
public void printFreq(ArrayList<Frequency> al)
{
    for(int i = 0; i < al.size(); i++)
    {
        System.out.println(al.get(i).getString() + "; " + al.get(i).getFreq());
    }
}

}

в buildTree () метод - то, где у меня есть проблема. то, что я пытаюсь сделать, является объектами Частоты очереди, который содержит букву/пространство/символ и частоту как интервал, класс частоты - это. общедоступный класс Частота реализует Сопоставимый {частная Строка s; частный интервал n;

Frequency(String s, int n)
{
    this.s = s;
    this.n = n;
}
public String getString()
{
    return s;
}
public int getFreq()
{
    return n;
}
public void setFreq(int n)
{
    this.n = n;
}
@Override
public int compareTo(Object arg0) {
    // TODO Auto-generated method stub
    return 0;
}

}

как я могу заставить priorityqueue использовать число частоты для организации очередей их от самого маленького до самого большого?

5
задан Zieklecknerizer 22 July 2010 в 00:53
поделиться