将列表添加到BinarySearchTree <integer,list <object =“”>&gt;

时间:2016-12-01 12:55:32

标签: java

我是Java的新手,我希望将一个列表添加到BinarySearchTree中,其中Integer为Key,List为value。 所以我需要一个列表的每个元素,我想添加并添加到BST。 我使用BST是因为我需要用密钥对它进行排序。 在类Group中,我有一个名为getNumber()的方法,它返回该组中的数字os元素,键将是组的元素数。

现在我有这个,我不知道如何继续。
groups.iterator()只是迭代列表的每个组。 orderedGroups是BinarySearchTree <Integer, List<Group>>()

编辑: 我有这个。

public Iterator<Entry<Integer, List<Group>>> listWarriors() throws NoGroupsException {
        if(!isThereGroup())
            throw new NoGroupsException();
        Iterator<Entry<String, Group>> it = groups.iterator();
        List<Group> listGroup = new DoublyLinkedList<Group>();
        int j = 0;
        while(it.hasNext()) {
            listGroup.add(j, it.next().getValue());
            j++;
        }
        for(int i = 0; i<j; i++) {
            List<Group> list = orderedGroups.find(listGroup.get(i).getNumber());
            if(list == null) {
                list = new DoublyLinkedList<Group>();
                list.addFirst(listGroup.get(i));
                orderedGroups.insert(-(listGroup.get(i).getNumber()), list);
            }
            else {
                if(list.equals(listGroup.get(i))) {
                    list.addFirst(listGroup.get(i));
                }
            } 
        }
        return orderedGroups.iterator();
    }

OrderedDictionary&gt; orderedGroups = new BinarySearchTree&gt;();

通过这样做添加了一个组。

public void addGroup(String idGrupo, String nome) throws GroupAlreadyExistsException {
        if(searchGroup(idGrupo))
            throw new GroupAlreadyExistsException();
        group = new GroupClass(idGrupo, nome);
        groups.insert(idGrupo.toLowerCase(), group);    
    }

我在一个名为System的类中拥有所有这些。

2 个答案:

答案 0 :(得分:0)

看起来您认为必须滚动自己的迭代器才能枚举列表。没必要。

我无法确切地告诉你这里要做什么,但也许下面的内容会有所帮助,这只是演示了如何迭代列表。

void addListToGroup(List<Foo> myList, List<group> myGroups) {
   for (Foo foo : myList) {
      Object value=myList.someFunction();
      Group newGroup = new Group(value);
      myGroups.add(newGroup);
    }
 }

答案 1 :(得分:0)

我不确定我完全理解你要做什么,以及为什么你没有使用LinkedList和TreeMap,但我在你的代码中看到了一些问题:

  1. 你的for循环让我从1开始,而list indices从0开始,
  2. 构建listGroup似乎没用:你可以直接构建orderedGroups
  3. orderedGroups未在您的代码中修改(尽管为orderedGroupsByC)
  4. 更新:

    如果你这样做会怎么样:

    Iterator<Entry<String, Group>> it = groups.iterator();
    while (it.hasNext()) {
        Group group = it.next();
        List<Group> list = orderedGroups.find(group.getNumber());
        if (list == null) {
            list = new DoublyLinkedList<Group>();
            list.addFirst(group);
            orderedGroups.insert(group.getNumber(), list);
        } else {
            list.addFirst(group);
        }
    }