我正在尝试做一项关于链表的作业,不幸的是,我无法在线发布我的代码。但总体问题是这样的:
我有一个生物体的链接列表:列表->斑马->鬣狗->狮子->草地
但我希望列表按顺序显示(食物链(: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
祝你好运!