首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >流程控制,实现替换方法列表

流程控制,实现替换方法列表
EN

Stack Overflow用户
提问于 2013-03-24 16:19:23
回答 2查看 92关注 0票数 2

直接从http://docs.oracle.com/javase/tutorial/collections/interfaces/list.html

代码语言:javascript
运行
复制
public static <E> void replace(List<E> list, E val, E newVal) {
    for (ListIterator<E> it = list.listIterator(); it.hasNext(); )
        if (val == null ? it.next() == null : val.equals(it.next()))
            it.set(newVal); }

这个例子中唯一的小技巧是val和it.next之间的相等性测试。您需要特殊情况下val值为null,以防止NullPointerException。

我想知道为什么我们需要特殊的val值为null来防止NullPointerException。我可能会理解,我们需要安全的代码来防止NullPointerException,然而,这一行代码

代码语言:javascript
运行
复制
if (val == null ? it.next() == null : val.equals(it.next()))

与集合迭代无关,而是只在参数方法中指定val参数。

感谢您对上述内容的任何澄清。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-24 16:24:34

您对这里发生的事情的理解是完全正确的:他们正在讨论的“特殊情况”与空检查参数有关,而不是与列表的迭代有关。

实际上,您可以将if语句移出循环之外,以获得一种效率稍高但可读性较低的解决方案:

代码语言:javascript
运行
复制
if (val != null) {
    for (ListIterator<E> it = list.listIterator(); it.hasNext(); )
        if (val.equals(it.next()))
            it.set(newVal);
} else {
    for (ListIterator<E> it = list.listIterator(); it.hasNext(); )
        if (it.next() == null)
            it.set(newVal);
}
票数 2
EN

Stack Overflow用户

发布于 2013-03-24 16:24:00

该测试封装了两个在val中定位list的不同规则。

  1. 如果valnull,那么列表元素必须是null才能匹配(回想一下,列表可以包含null值)
  2. 如果val不是null,那么val必须等于(使用.equals())列表元素才能匹配

NullPointerExceptionnull时,如果您试图评估val.equals(list.next()),那么val就会出现。

这个方法可以写成这样:

代码语言:javascript
运行
复制
public static <E> void replace(List<E> list, E val, E newVal) {
    if (val == null) {
        for (ListIterator<E> it = list.listIterator(); it.hasNext(); )
            if (it.next() == null)
                it.set(newVal);
    } else {
        for (ListIterator<E> it = list.listIterator(); it.hasNext(); )
            if (val.equals(it.next()))
                it.set(newVal);
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15600886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档