2010-12-13 6 views
0

Другие говорят, что для создания двоичного дерева поиска с массивом {3,7,1,90,45,67,54,23,...} полезно работать с TreeSet. Но мой код ниже будет генерировать исключение, и я не знаю почему? мой список массивов "array" содержит 100 objects, что каждый объект имеет two fields 1)digit 2)name, и я хочу сделать BST с этим полем цифр этих объектов. Помогите мне спасибо.Создание двоичного дерева поиска вызывает исключение

 TreeSet<Element> set = null; 
    set = new TreeSet<Element>(); 
    for(Element e :array){ 
     set.add(e); 
    } 

    Iterator it1 = set.iterator(); 

    while (it1.hasNext()) { 
     Object o1 = it1.next(); 
     System.out.println(o1); 
    } 

Исключение:

Exception in thread "main" java.lang.ClassCastException: OBST.Element cannot be cast to java.lang.Comparable 
    at java.util.TreeMap.put(TreeMap.java:542) 
    at java.util.TreeSet.add(TreeSet.java:238) 
    at OBST.GreedyVersion.<init>(GreedyVersion.java:25) 
    at OBST.GreedyVersion.main(GreedyVersion.java:66) 

, который из-за линии: set.add(e);

ответ

6

Это действительно плохой вопрос. В другом вопросе (и здесь) вы говорите, что у вас есть {3,7,1,90,45,67,54,23,...}. Но вы объявляете свой набор TreeSet<Element> set. Итак, что у вас на самом деле? У вас есть массив целых чисел? Или это массив из Elements?

Если это действительно массив элементов, сообщение об ошибке говорит именно то, что проблема есть, ваш класс Элемент должен реализовать Comparable

+0

да, вы правы, я понял! – user472221

4

Ваш Element класс не реализует интерфейс Comparable, который необходим в TreeSet.

Внедрение интерфейса Comparable на Element заставит вас реализовать метод compareTo. Это определит, как объекты типа Elementранг друг против друга. Это необходимо для TreeSet, чтобы он знал, как и где разместить каждый Element в дереве.

0

Java поддерживает только отсортированные элементы в TreeSet. Чтобы сделать элемент отсортированным, он должен реализовать Comparable interface.

0

Я думаю, что вы получаете эту ошибку, потому что элементы, которые вы добавляете, не реализуют интерфейс Comparable. Какой тип массива?

Смежные вопросы