- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个对象链接列表,与第一个、最后一个、下一个、上一个变量链接在一起,每个变量代表列表中的适当节点。这个列表工作正常。
我现在正在尝试向其中添加 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/
我是一名优秀的程序员,十分优秀!