Java ArrayList和节点

Java ArrayList和节点,java,class,arraylist,parameters,linked-list,Java,Class,Arraylist,Parameters,Linked List,我正在尝试重写刺客管理器(见下文)的构造函数此方法是一个将ArrayList作为参数的构造函数。ArrayList应该按照名称的显示顺序将名称添加到对象中。每个新节点都应添加到链表的末尾。考虑到要使用的新属性,我不确定如何实现这一点 第一版: private static class AssassinNode { private String player; private String killer; private AssassinNode next; p

我正在尝试重写
刺客管理器
(见下文)的构造函数此方法是一个将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); 
}
私有静态类节点{
私人弦乐演奏者;
私人线人;
私有节点下一步;
专用节点(字符串名称){
this.player=名称;
this.killer=null;
this.next=null;
} 
}
私有节点killing;//杀人环链表的头-第一个链接
私人刺客节点墓地;//墓地链接列表的头-第二个链接
公共刺客经理(ArrayList玩家){
如果(players==null | | players.isEmpty()){抛出新的IllegalArgumentException()}
killring=新节点(players.get(0));//为killring创建第一个节点
刺客节点=killring;
对于(inti=1;i
新版本:

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); 
}
private KillList killring;
私人刺客诺德达塔墓地;
公共刺客经理(ArrayList玩家){
如果(players==null | | players.isEmpty()){抛出新的IllegalArgumentException()}
killring=新的KillList(players.get(0));
KillList节点=killring;
node.addAll(玩家);
}
KillList扩展了LinkedList
现在我正试图实现同样的目标,而不使用
next

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


非常感谢您的任何建议或解决方案

如果您能够更改
节点
,您可以这样做

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
}

公共类管理器{
LinkedList killring=新LinkedList();
公共经理(球员名单){
if(players==null | | players.isEmpty()){
抛出新的IllegalArgumentException();
}
刺客节点刺客=null;
用于(弦乐演奏者:演奏者){
刺客=新刺客节点(玩家,刺客);
杀人。添加(刺客);
}
}
公共静态void main(字符串[]args){
List players=Arrays.asList(“eizo”、“shay”、“arno”、“arbaaz”);
刺客经理=新刺客经理(玩家);
}
}

您可能想编写一个insert方法,但一般来说,添加到链接列表的唯一方法是使用下一个属性在listnode上迭代。addAll(玩家),像这样试试Hello@cricket_007:)那么您的意思是唯一的方法就是在第一个版本中如何使用它?我不熟悉你指的是什么-写一个insert方法?@Hemakumar谢谢你的建议-让我看看它有什么作用@不幸的是,这不起作用!你好我尝试了您的解决方案并实现了我自己的方法-但是
killring.add(刺客)
显示一个错误,显示“找不到合适的方法添加(刺客节点)”,另一种方法是创建
add(刺客节点)
方法在暗杀者节点中。@Ani您说的
KillList扩展了LinkedList
,所以它应该有一个
add
。因为你没有告诉我,
刺客节点数据
刺客节点
之间有什么区别,我想他们的意思是一样的。不,他们是不同的。因此他们的名字。你能详细介绍一下add()吗。像在KillList类中创建add方法吗?@Ani我相信你应该更好地描述你的类结构和你想要实现的目标。如果
KillList扩展了LinkedList
,则以下内容不能同时为真
KillList(子类)和killnodedata(超类)
。或者不清楚你的意思。我为你的困惑道歉。然而,你的解决方案暗示了一些非常有用的东西,所以我会接受它,看看我能从那里走到哪里!非常感谢你的帮助^^