千万不要这样使用Arrays.asList !

测试的几种情况及原因:

public static void main(String[] args) {

//第一种基本类型数组
int[] arr = {1,2,3,4};
List list = Arrays.asList(arr);
System.out.println(list.size()); //1
// 由于Arrays.ArrayList参数为可变长泛型,而基本类型是无法泛型化的,
// 所以它把int[] arr数组当成了一个泛型对象,所以集合中最终只有一个元素arr。
for (int i=0;i<list.size();i++){
System.out.println(i+list.get(i).toString());
}//0[I@1134affc

//第二种字符串数组修改
String[] strArr = {"sha","diao","nv","hai"};
List list2 = Arrays.asList(strArr);
strArr[1]="cha";
list2.set(2, "nan");
System.out.println(strArr[1].hashCode()); //98460
System.out.println(list2.get(1).hashCode());//98460
// 由于asList产生的集合元素是直接引用作为参数的数组,
// 所以当外部数组或集合改变时,数组和集合会同步变化,这在平时我们编码时可能产生莫名的问题。
System.out.println(Arrays.toString(strArr));//[sha, cha, nan, hai]
System.out.println(list2.toString());//[sha, cha, nan, hai]


//第三种list增加、删除操作
String[] strArr1 = {"sha","diao","nv","hai"};
List list1 = Arrays.asList(strArr1);
//返回的是Arrays的内部类Arraylist,并不是java.util报里面的,
// 这个Arraylist实现了AbstractList但是并没有重载add和remove方法
//AbstractList像一个适配器是直接抛异常的
list1.add("zi"); //UnsupportedOperationException异常
list1.remove("sha");
list1.remove("diao");
System.out.println(list1.toString()); }
Arrays.asList()源码:
    public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
} private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable
{
private static final long serialVersionUID = -2764017481108945198L;
private final E[] a; ArrayList(E[] array) {
a = Objects.requireNonNull(array);
}
...}

  

Arrays.asList()需要注意的点的更多相关文章

  1. 【转】java.util.Arrays.asList 的用法

    DK 1.4对java.util.Arrays.asList的定义,函数参数是Object[].所以,在1.4中asList()并不支持基本类型的数组作参数. JDK 1.5中,java.util.A ...

  2. Arrays.asList()注意

    api: public static <T> List<T> asList(T... a) 返回一个受指定数组支持的固定大小的列表.(对返回列表的更改会“直接写”到数组.)此方 ...

  3. Arrays.toString Arrays.asList

    import java.util.Arrays; public class TestCalc{ public static void main(String[] args) { ,,,,,,,}; / ...

  4. Arrays.asList()使用注意点

    今天看代码时, 发现书上使用了Arrays.asList()方法, 将一个数组转成了List, 然后说到得到的List不能调用add(), remove()方法添加元素或者删除,带着疑问看了下内部实现 ...

  5. Arrays.asList(数组) 解说

    最近在用Arrays的asList()生成的List时,List元素的个数时而不正确. Java代码 一:Arrays.asList(数组)该方法是将数组转化为集合(该方法主要用于Object对象数组 ...

  6. Arrays.asList方法总结

    import java.util.Arrays; import java.util.List; /** * * 本类演示了Arrays类中的asList方法 * 通过四个段落来演示,体现出了该方法的相 ...

  7. Arrays.asList的使用及异常问题

    将数组转成List问题,通常我们习惯这样写成:List<String> list = Arrays.asList("1","2"); 于是我们这样就 ...

  8. Arrays.asList引起的惨案

    最近代码中需要对两个数组求交,想当然便用到了List中的retainAll函数,但要将将数组转换成list.代码如下: String[] abc = new String[] { "abc& ...

  9. Arrays.asList的源码分析

    以前一直很奇怪为什么Arrays.asList的数组不能插入新的数据,后来看了源码发现是因为内部是一个final的数组支持起来的Arraylist,下面贴入源码与分析. 1.先看Arrays的方法 我 ...

  10. 【转载】最近在用Arrays的asList()生成的List时,List元素的个数时而不正确,数组转化为List,即Arrays.asList(intArray);

    最近在用Arrays的asList()生成的List时,List元素的个数时而不正确. Java代码 //经多次测试,只要传递的基本类型的数组,生成List的元素个数均为1 char arrc = { ...

随机推荐

  1. pypi镜像-清华

    临时使用 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package 注意,simple 不能少, 是 https 而不是 ...

  2. 使用layui时遇到的问题以及解决文章链接

    1.斜线表头效果 2.表格嵌套使用 3.layui数据表格跨行自动合并 4.layui表格数据变更的处理方式 5.layer弹窗动态添加KindEditor编辑器 6.layer弹出层自动调节位置 7 ...

  3. VS2010运行opencv的程序,出现“应用程序无法正常启动0xc000007b”的解决方法

    问题描述 当我们在用vs2010对工程进行编译结束后,并且生成了可执行文件时,但是运用时却出现了"应用程序无法正常启动0xc000007b" 解决方法 这个通常是有一些动态链接库没 ...

  4. Java方法之方法的定义和调用

    方法的定义 Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法: 方法包含一个方法头和一个方法体.下面是一个方法的所有部分: 1.修饰符:修饰符 ...

  5. elm上传图片,只能上传一张,隐藏+上传框

    效果: 上传后,隐藏+号,禁止继续上传: 移除当前已上传的后,重新显示+号,可以继续上传: 代码: css : 隐藏上传的 + 号 变量: 注: 利用 hideUpload 控制 + 号的css   ...

  6. Pytest全局用例共用之conftest.py详解

    本文转自:https://blog.csdn.net/qq_36502272/article/details/102975467 一.'conftest特点: 1.可以跨.py文件调用,有多个.py文 ...

  7. Telerik——GridView总结(Winform)

    在使用Telerik控件时有很多的方法,属性经常被用到,分享在此总结也便于查看复习. 1.基本属性 GridViewTextBoxColumn col = new GridViewTextBoxCol ...

  8. jdk版本与项目依赖jar包不兼容

    这两天出现了一个 java.lang.RuntimeException: java.io.IOException: invalid constant type: 18 tomcat启动出现这个问题的原 ...

  9. heap 算法函数

    这一系列函数是在做 这道题 时发现的 这道题空间卡的很死,是不能用数组存下所有数字进行快排的 后来又尝试用 \(multiset\) 优化空间,发现不行,可能是 \(multiset\) 还有结构性存 ...

  10. 收集的sql经典语句

    经典SQL语句大全 一.基础1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql serve ...