首页 > 编程知识 正文

java编译成class,java集合交集和并集

时间:2023-05-05 13:09:58 阅读:41646 作者:1575

现在的一些高级编程语言提供了各种现成的数据结构实现。 Java编程语言的集合框架提供了多种实现。 集合类包含两个大类: Map和Collection。 其中,Collection下的列表是我们常用的集合类之一,很多业务代码都离不开。 今天我们来看看列表中的漏洞。

第一个坑: Arrays.asList方法返回的List不支持添加/删除操作

例如,执行以下代码:

liststrings=Arrays.aslist('m ',' g ' );

strings.add('h );

抛出Java.lang.unsupportedoperationexception异常时,你内心操作系统OS what? 返回的ArrayList为什么不能在里面增加元素,以后还能好好增加元素吗? 然后下定决心打开调试大法:

我们发现返回的ArrayList是Arrays的内部类java.util.Arrays.ArrayList,而不是我们常用的java.util.ArrayList。 方法要访问Arrays.asList源代码,请执行以下操作:

publicstaticlistaslist(t.a ) {

返回新阵列列表(a;

}

方法返回Arrays的静态内部类java.util.Arrays.ArrayList。 我们发现此类和java.util.ArrayList继承自抽象类java.util.AbstractList,但未从该类的源代码继承到抽象父类Ablist

此孔的根本原因是返回的strings add方法调用从抽象父类继承的add方法,而抽象父类的方法缺省情况下称为Java.lang.unsupportedoperationexception

第二个坑受Arrays.asList方法返回的新List以及该方法的原始参数集的更改的影响

除了上述不支持添加/删除元素的坑之外,Arrays.asList方法还有一个坑:

从上面的代码中可以看到,对原始数组的更改会影响通过Arrays.asList方法获得的新List,并深入到java.util.Arrays.ArrayList的源代码中。

隐私保护角色列表

实施随机访问,java.io.Serializable

{

privatestaticfinallongserialversionuid=-2764017481108945198 l;

私人财务e [ ] a;

阵列列表(e [ ]阵列) {

a=objects.requirenonnull(Array );

}

.

}

可以看出原样使用了原来的数组。 使用以Arrays.asList方式获得的所有List时,请特别注意。 由于共享数组,因此相互修改可能会导致意外错误。 一种标准姿势是将其作为ArrayList构建方法的参数来新更新List即可(e.g.liststringlist=new ArrayList (Arrays.as list ) arrays ) )

如果直接遍历List集合并删除元素,则第三个坑会出错

如果在直接遍历集合元素时添加或删除元素,则会报告错误,如执行以下代码:

liststringlist=lists.new ArrayList (' m '、' g '、' h ' );

for (strings :字符串列表) {

if(Arrays.aslist('m ',' h ' ).contains(s ) ) }

stringlist.remove(s;

}

}

上述代码可以成功编译,但在运行时抛出Java.util.concurrentmodificationexception异常。 查看其源代码时,删除元素方法remove将更改集合结构。 也就是说,modCount (集合实际更改的次数)将发生更改。 循环进程将当前列表集合实际修改的次数modCount与迭代器修改的次数expectedModCount进行比较,但expectedModCount是初始化时的modCount,如果两者不相等,则coctedmodcount 解决方法主要有两种。 使用ArrayList迭代方法进行遍历,并调用其中的方法。 在JDK 1.8中,可以使用removeIf方法执行删除操作。

最后,调用ArrayList的remove方法传递int基本类型的数字和Integer包类型的数字,执行结果是否相同?

到这里为止,详细解说了Java集合系List的关于这个坑的报道就介绍到这里了。 有关更多相关Java List集合类坑的内容,请搜索脚本存储中的以前文章或继续查看以下相关文章。 今后也想继续支持脚本房屋。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。