由Set和List组合检验重复问题引发的思考以及验证

1、如何利用set、list做检查重复的功能


代码展示

 public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("A");
        list.add("B");
        list.add("D");
        list.add("C");
        list.add("B");
        System.out.println("list  === > " + list);

        Set<String> set = new HashSet<String>();
        for(String s : list) {
            set.add(s);
        }
        System.out.println("set === >" + set);
        if(set.size() != list.size()) {
            System.out.println("有重复的元素存在");
        }

    }

上述代码的运行结果是:
list === > [A, B, D, C, B]
set === >[A, B, C, D]
有重复的元素存在

2、为什么会有上述效果呢?

ArrayList的add方法
ArrayList的add方法

/**
     * {@inheritDoc}
     * @throws IllegalArgumentException if this {@code AttributeList} is
     * <a href="#type-safe">type-safe</a> and {@code element} is not an
     * {@code Attribute}.
     */
    @Override
    public boolean add(Object element) {
        adding(element);
        return super.add(element);
    }

HashSet的add方法
HashSet的add方法

public boolean add(T o) {

            if (!o.getClass().isAssignableFrom(c)) {
                MessageFormat form = new MessageFormat(ResourcesMgr.getString
                        ("attempting.to.add.an.object.which.is.not.an.instance.of.class"));
                Object[] source = {c.toString()};
                throw new SecurityException(form.format(source));
            }

            return set.add(o);
        }

3、结论

List接口中的内容可以重复
Set接口不能加入重复元素,但是可以排序

猜你喜欢

转载自blog.csdn.net/Ashes18/article/details/81587722
今日推荐