ArrayList和节点

我试图重写一个构造函数AssassinManager(见下文)。此方法是一个以ArrayList作为参数的构造函数。ArrayList应该按照出现时的确切顺序将名称添加到对象中。每个新节点都应添加到链接列表的末尾。考虑到要使用的新属性,我不确定如何实现这一点。

第一版:

private static class AssassinNode {
    private String player; 
    private String killer; 
    private AssassinNode next;
    private AssassinNode(String name) {
        this.player = name; 
        this.killer = null; 
        this.next = null;
    } 
}

private AssassinNode killring;  // the head of the kill ring linked list - first link
private AssassinNode graveyard; // the head of the graveyard linked list - second link 

public AssassinManager(ArrayList<String> players) { 
    if (players == null || players.isEmpty()) { throw new IllegalArgumentException(); }
    killring = new AssassinNode(players.get(0)); // create first node - for the killring
    AssassinNode node = killring; 
    for (int i = 1; i < players.size(); i++) { // Add a new node at the end of each killing 
        node.next = new AssassinNode(players.get(i));
        node = node.next;
    }
}

新版本:

private KillList killring; 
private AssassinNodeData graveyard;

public AssassinManager(ArrayList<String> players) {
    if (players == null || players.isEmpty()) { throw new IllegalArgumentException(); }
    killring = new KillList(players.get(0));
    KillList node = killring; 
    node.addAll(players); 
}

KillList extends LinkedList<AssassinNodeData>现在,我尝试不使用来实现相同的目的next

类之间的关系:KillList(子类)和AssassinNodeData(超类)

任何建议或解决方案,不胜感激!

次优

如果您能够进行更改,则AssassinNode可以这样进行。

public class AssassinNode {

    private final String player;
    private AssassinNode parent;
    private AssassinNode child = null;

    AssassinNode(String player, AssassinNode parent) {
        this.player = player;
        this.parent = parent;
        addToParent(parent);
    }

    void setChild(AssassinNode child) {
        this.child = child;
    }

    private void addToParent(AssassinNode parent) {
        parent.setChild(this);
    }
    // other getters and code
}

public class AssassinManager {

    LinkedList<AssassinNode> killring = new LinkedList<>();

    public AssassinManager(List<String> players) {
        if (players == null || players.isEmpty()) {
            throw new IllegalArgumentException();
        }
        AssassinNode assassin = null;
        for (String player : players) {
            assassin = new AssassinNode(player, assassin);
            killring.add(assassin);
        }
    }

    public static void main(String[] args) {
        List<String> players = Arrays.asList("eizo", "shay", "arno", "arbaaz");
        AssassinManager manager = new AssassinManager(players);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章