如何对链接列表重新排序



我正在尝试做一项关于链表的作业,不幸的是,我无法在线发布我的代码。但总体问题是这样的:

我有一个生物体的链接列表:列表->斑马->鬣狗->狮子->草地

但我希望列表按顺序显示(食物链(:orderedList->Lion->Hyena->Zebra->grass

此外,我可以像一样将一种生物体添加到列表中

list.add("T-Rex");

那么我想要的结果应该是orderedList->霸王龙->狮子->鬣狗->斑马->草地

如何添加生物体,然后以显示层次结构的方式对其进行排序?我能放下的有机体数量有限,所以我知道该把它们放在哪里。例如,我知道如果我放霸王龙,它将永远在狮子之上,海娜将永远早于格拉斯。。。等等。我一直在YouTube和谷歌上寻找教程,但它们大多是按字母顺序排列数字或字符串,我认为这对我的问题没有帮助。

如果有任何帮助,我将不胜感激,因为这是我第一次处理链表。

您可以使用

add(int index, E element);

它在此列表中的指定位置插入指定的元素,并移动当前位于该位置的元素。因此,当你知道元素的位置时,你可以在所需的位置添加新的元素。

list.add(0,"T-Rex");

您可以用某种层次级别的值e.g: T-Rex - 1, Lion - 2, ...映射列表中的每只动物。然后,您可以将所有值放在LinkedList中,并使用自定义Comparator进行排序,或者作为Priority Queue的替代方案。

因此,您将在列表中对层次结构进行排序。示例:

class Organism {
String name;
int level;
public Organism(String name, int level) {
...
}
}
PrioriQueue q = new PriorityQueue(...custom_comparator...);
q.add(...add_all_organism_here....)

我会这样做:

创建类Organism,实现Comparable,并具有特定于类的自定义自然排序。

public class Organism implements Comparable<Organism> {
private Integer hierarchy;
private String name;
public Organism (String nameArg, Integer hierarchyArg) {
name = nameArg;
hierarchy = hierarchyArg;
}
public Integer getHierarchy() {
return hierarchy;
}
public String getName() {
return name;
}
@Override
public int compareTo(Organism a) 
{
return this.getHierarchy().compareTo( a.getHierarchy() );
}
}

现在我可以按任何顺序添加到列表中:

//Put a big gap between the numbers so if you need later you can add more organisms in between 
list.add(new Organism("T-Rex", 1000));
list.add(new Organism("Zebra", 10));
list.add(new Organism("Lion", 500));
list.add(new Organism("Hyena", 200));

然后您可以使用Java对它们进行排序:

// Java old way of sorting. It will modify the 'list' itself
Collections.sort(list); 
//Java 8+ way of sorting. It does not modify the 'list' but create a new one.
List<String> sortedList = list.stream().sorted().collect(Collectors.toList());

可比接口文件:https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html

祝你好运!

相关内容

  • 没有找到相关文章

最新更新