首页 > 编程知识 正文

array和arrays,arrays.tolist

时间:2023-05-05 01:33:35 阅读:24938 作者:929

arrays.asList(arrays.aslist ) )在常规开发中很常见,可用于将数组转换为list集合

String[] myArray={'a '、' b '、' c'}; liststringlist=arrays.as list (myarray ); 等效于liststringlist=arrays.as list (' a '、' b '、' c ' ); Arrays.asList ) )将数组转换为集合后,基底实际上仍然是数组。 《阿里巴巴Java 开发手册》对该方法进行了如下说明。 注意:

传递的数组必须是对象数组,而不是基本类型。

Arrays.asList ()是通用方法,传递的对象必须是对象数组。

int [ ] myarray={ 1,2,3 }; list my list=arrays.as list (myarray ); system.out.println(mylist.size ); //1系统. out.println (my list.get (0) ); //数组地址值system.out.println (my list.get (1); //错误: arrayindexoutofboundsexceptionint [ ] array=(int [ ] ) mylist.get(0; system.out.println(Array[0]; //1传递本机数据类型数组时,Arrays.asList ) )的真正参数是数组对象本身,而不是数组中的元素! 此时List的唯一元素是这个数组,这也解释了上面的代码。

要解决此问题,请使用包裹类型的数组。

integer [ ] myarray={ 1,2,3 };使用集合的修改方法:add()、remove()、clear()会抛出异常。

list my list=arrays.as list (1,2,3 ); mylist.add(4; //运行时错误: unsupportedoperationexceptionmylist.remove (1; //运行时错误: unsupportedoperationexceptionmylist.clear (; //运行时错误: unsupportedoperationexception http://www.Sina.com /

如何将数组正确转换为ArrayList? 1 .手动实现

statictlisttarraytolist (finalt [ ] array ) finallisttL=newArraylist ) Array.Length ); for (final ts :阵列) L.add ) s; }返回l; } integer [ ] myarray={ 1,2,3 }; system.out.println (arraytolist (myarray ).getClass ); 2 .最简单的方法

list list=new ArrayList (arrays.as list (1,2,3 ); 使用Java 8的流

//包装类integer [ ] myarray={ 1,2,3 }; listlist=Arrays.stream(MyArray ).collect (collectors.to list ); //基本类型int [ ] myarray2={ 1,2,3 }; list list=arrays.stream (myarray2).boxed ).collect (collectors.to list ) );

Collection.toArray ()方法中使用的坑如何反转数组,请参见t[]toarray ) t[]a ); 如果没有向toArray方法传递参数,则返回Object类型数组。

String [] s=new String[]{ 'dog '、' lazy '、' a '、' over '、' jumps '、' fox '、' brown '、' quick '、' }; liststringlist=Arrays.aslist(s; collections.reverse (列表; s=list.toArray(newstring[0]; 如果不指定//类型,则会因JVM优化而发生错误。 new String[0]现在更好地用作Collection.toArray )方法的参数。 new String[0]用作模板,并指定返回数组的类型。 0只是为了说明返回类型,所以是为了节约空间。 详见3359 shipilev.net/blog/2016/arrays-wisdom-ancients /

如果在foreach循环中执行remove操作而不执行元素的remove/add操作,则可以调用迭代器的remove方法,而不是集合类的remove方法。 在列表随时从结构创建迭代器后,迭代器会抛出concurrentmodificationexception,除非以任何方式通过迭代器自己的remove/add方法。 这就是单线程状态下生成的故障快速机制。

故障快速机制:如果多个线程对故障快速集合进行修改,则可能会抛出concurrentmodificationexception。 单线程也会发生这种事。 如上所述。 从Java8开始,Collection#removeIf ) )方法可以删除满足特定条件的元素,例如

列表integer list=new ArrayList (; for(intI=1; i=10; I ) ) list.add ) I; } list.remove if (过滤器-过滤器%2==0); 删除list中的所有偶数*/system.out.println(list ); /*[1、3、5、7、9]*/Java.util包下的所有集合类都是fail-fast,而java.util.concurrent包下的所有类都是fail-ssist

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