gpt4 book ai didi

java - 如何从双向链表中提取值?

转载 作者:行者123 更新时间:2023-12-01 14:18:21 24 4
gpt4 key购买 nike

我有一个对象链接列表,与第一个、最后一个、下一个、上一个变量链接在一起,每个变量代表列表中的适当节点。这个列表工作正常。

我现在正在尝试向其中添加 SUB 值(子双向链表)。父列表中的每个项目都将包含其自己的双向链表。

我在引用原始链接列表中的项目时遇到问题。

创建值的链接列表后,如何访问它们?

我有什么:

public class Menu<E> {
private mNode first;
private mNode last;
private mNode previous;
private mNode next;
private int size = 0;

public Menu(){
first = null;
last = null;
previous = null;
next = null;
}

public Menu(E[] elements){
for (int i = 0; i < elements.length; i++)
add(elements[i]);
}

private boolean isEmpty(){
return first == null;
}

public void add(E e){
mNode currentNode = new mNode(e);

if(isEmpty())
first = currentNode;
else if (last == null)
last = currentNode;
else{
last.next = currentNode;
currentNode.previous = last;
last = currentNode;
}

size ++;

}

mNode 类尚未真正开发完成,但仅供引用:

public class mNode<E> {
E element;
mNode<E> first;
mNode<E> last;
mNode<E> previous;
mNode<E> next;
int index;

public mNode(){

}

public mNode(E e){
element = e;
}

}

所以,我的问题是,一旦我将一堆元素添加到链接列表中,我就可以迭代它并将它们全部打印出来,但是我如何找到并提取特定的菜单项?

编辑:

为了清楚起见,假设我有

项目 1 <> 项目 2 <> 项目 3 <> 项目 4

全部在第一个列表中。我想将 subitem1 <> subitem2 <> subitem3 添加到父列表中的 Item 2。

如何获取第 2 项的 mNode 引用?

在主方法中创建一个

Menu list = new Menu();
list.add(values) // adding all 4 menu items

你不能真正执行 list.get(Item 2),因为 Item 2 不是菜单内的变量。

最佳答案

您的菜单对象需要有额外的方法,例如getByIndex(int n)getByName(String name) (或菜单可访问的任何其他属性)。如果您希望支持 getByName() 功能,并且您的菜单很大,则可以考虑使用 Map 等附加结构。

真正的问题是为什么您需要获取特定菜单的引用?理想情况下,菜单应该有两个职责:a)绘制自身;b)让系统知道其状态发生了变化(即单击)。这就是为什么几乎所有菜单系统都支持某种回调机制,例如在 Swing 中,您可以附加一个 ActionListener,让您知道菜单上执行了某个操作并对此做出响应。使用这个想法,你会得到类似这样的东西(这不是完整的代码,只是一个演示):

interface MenuListener {
public void menuClicked(Menu m);
// other type of handlers here, when menu state changes e.g. menuExpanded()
}

public class Menu {
...
List<MenuListener> listeners = new ArrayList<MenuListener>();

// this method will be called internally by each menu when it detects
// that its state changed
private void notifyListeners() {
for (MenuListener listener : listeners) {
// let all the listeners know this menu was clicked
listener.menuClicked(this);
}
}
}

// now when menu is created assign a listener to it
Menu item = new Menu(...);
item.addMenuListener( new MenuListener () {
public void menuClicked(Menu m) {
// do something with item here
}
});

关于java - 如何从双向链表中提取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17905195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com