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(超类)
。或者不清楚你的意思。我为你的困惑道歉。然而,你的解决方案暗示了一些非常有用的东西,所以我会接受它,看看我能从那里走到哪里!非常感谢你的帮助^^