千万不要这样使用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. 为什么Controller层注入的是Service接口,而不是ServiceImpl实现类

    转自csdn--https://blog.csdn.net/weixin_39565597/article/details/78078728 今天看代码发现,写法和自己理解的java写法不一致,就查找 ...

  2. 工程师突击:SAP ABAP实用程序开发攻略.pdf

    工程师突击:SAP ABAP实用程序开发攻略.pdf 有需要的联系 wx :erpworld

  3. vue中常用的插件

    1. wangeditor 富文本编辑器,https://www.wangeditor.com/

  4. 3.Linux安装docker

    Docker作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包到一个容器中,然后很容易地发布和应用到任意平台中. 进入docker官网找到安装文档 https://docs ...

  5. Mysql 非幂等性

    幂等性就是指:一个幂等操作任其执行多次所产生的影响均与一次执行的影响相同. -- 幂等性在分布式高并发中很常见,如不能重复点赞.电商订单库存数要一致等. MySQL解决非幂等性常用方法: 1.乐观锁 ...

  6. 启动 RMAN 客户端并与之交互

    启动和退出 RMAN RMAN 可执行文件与数据库一起自动安装,通常与其他数据库可执行文件位于同一目录中.例如,Linux 上的 RMAN 客户端位于$ORACLE_HOME/bin. 您有以下启动 ...

  7. ESP-Example ble-ancs解析

    苹果通知中心服务(ANCS)的目的是让蓝牙配件(通过蓝牙低能耗链接连接到iOS设备)以简单方便的方式访问iOS设备上产生的各种通知. Apple通知中心服务是主服务,其UUID为7905F431-B5 ...

  8. 数据驱动DDT(Data-Driven Tests):测试数据的参数化

    准备第三方库: 首先安装ddt库,其次在脚本中引入ddt 打开官网 https://pypi.org/project/ddt/ from ddt import ddt,data,unpack @ddt ...

  9. 【2020NIO.AC省选模拟#10】C. 寄蒜几盒

    题目链接 原题解: 可以发现,假设我们把凸多边形看做障碍,一个点没有被染色当且仅当在它的位置上能看到凸多边形任意两条相对的边中的一条(也就是能看到至少$\dfrac{n}{2}$条边). 对于每个询问 ...

  10. HttpClient请求接口实例demo

    HttpClient是Apache中的一个开源的项目.它实现了HTTP标准中Client端的所有功能,使用它能够很容易地进行HTTP信息的传输.HttpClient的主要功能: 实现了所有 HTTP ...