【问题标题】:What is the difference between removeAllElements() and clear() for DefaultListModel?DefaultListModel 的 removeAllElements() 和 clear() 有什么区别?
【发布时间】:2011-08-31 16:30:26
【问题描述】:

java swing中DefaultListModelremoveAllElements()clear()方法有什么区别?

java docs for DefaultListModel 说:-

public void clear()

删除所有 此列表中的元素。该名单将 此调用返回后为空 (除非它抛出异常)。

public void removeAllElements()

从此列表中删除所有组件 并将其大小设置为零。

所以两者基本上都从列表中删除了所有元素,那么有什么区别?如何决定何时使用哪个?

【问题讨论】:

    标签: java swing defaultlistmodel


    【解决方案1】:

    它们都是一样的。

    DefaultListModel 在后台使用Vector
    clear() 方法是后来在重新编写 Vector 以适应 Collection API 时添加的。

    在 1.3 版中,Collections API 进入了它的入口,因此 Vector 被重写以适应 List 接口。

    为了使其向后兼容,他们只需将调用转发到可用且可能的旧现有方法。

    编辑

    来自 Java 源代码:

    /**
     * Removes all components from this list and sets its size to zero.
     * <blockquote>
     * <b>Note:</b> Although this method is not deprecated, the preferred
     *    method to use is <code>clear</code>, which implements the 
     *    <code>List</code> interface defined in the 1.2 Collections framework.
     * </blockquote>
     *
     * @see #clear()
     * @see Vector#removeAllElements()
     */
    
    public void removeAllElements() {
    
            int index1 = delegate.size()-1;
            delegate.removeAllElements();
    
            if (index1 >= 0) {
                fireIntervalRemoved(this, 0, index1);
            }
    
    }
    

    【讨论】:

    • 我们可以用其中一个代替任何一个地方吗?还是有使用限制?
    • 如果您查看DefaultListModel 源代码,您会发现这两种方法完全相同,因此您可以根据需要使用其中一种。我只想补充一点,clear() 更有意义,因为它与 Collections 的方法名称相同。
    • 很好,我在写评论时没有阅读 javadoc!
    • clear() 方法不是后来根据Javadoc添加的,否则会有@since注解。结论:这两种方法从一开始就存在。 Collections 和 Swing 都是在 1.2 中引入的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    相关资源
    最近更新 更多