千万不要这样使用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. java连接couchbase的memcache

    没有参考代码的时候重新写还是有点累的,这是重温了,第一次写的时候参考了别的一些乱七八糟的代码,虽然不是和这个一样的,不过在不懂的情况下还是很快写出来了,反而是这次光是找需要哪些jar都搞了半天,最后发 ...

  2. 假设页面左侧有一个列表,点击列表某一项时,将根据当前id发起一个请求,并将响应结果展示在右侧。如果快速多次点击不同列表项,当网络不稳定时,请求返回的顺序与我点击顺序不符,导致展示的结果不是我最后一次点击的对应结果,怎么办?

    1.防抖/节流方案 ,不可完全避免,请求数据时间不一致2.如果使用ajax/axios,发起请求时可直接取消上一次未完成的请求可实现3.临时记录最后一次的id,要求服务器返回时携带id,对比选择后渲染 ...

  3. Android开发数据库Sqlite

    创建数据库 首先我们要了解这个类:SQLiteOpenHelper: 1.写一个类继承SQLiteOpenHelper 2.实现里面的方法,创建构造方法 参数解释: /** @param: conte ...

  4. Nginx安装以及部署Django项目

    Nginx官网:http://nginx.org/ Nginx中文文档:https://www.nginx.cn/doc/index.html Tengine(淘宝Nginx):http://teng ...

  5. SqlServer中 Partition By 的使用( 对多行数据分组后排序取每个产品的第一行数据)

    1:数据库表结构: (产品图片表) select * from product_imgs 2:应用场景: 可见表中每一个产品(pro_id)可能对应多个图片(img),我想要按照添加时间的先后顺序,获 ...

  6. mongodb更改账户密码

    docker部署方式更改 sudo docker exec -it mongodb mongo admin (登录数据库容器) use admin db.auth('admin','shijiehep ...

  7. 机器学习——常见的backbone

    参考链接:https://www.zhihu.com/question/396811409/answer/1252521120 LeNet:5层轻量级网络,一般用来验证小型数据: AlexNet/VG ...

  8. 「SOL」序列 (LOJ/NOI2019)

    准备写新博客的时候发现自己草稿箱里还有一篇咕了十几天的题解 思路挂在了费用流之前-- 题面 > Link LOJ #3158 解析 这道题的本质是一个二分图带权匹配的问题,一个经典的做法是直接做 ...

  9. 使用端口排查解决启动Tomcat端口被占问题

    有时候在eclipse中启动Tomcat或启动纯净版的Tomcat会出现端口被占的问题,下面菜鸟小编带大家进行端口排查解决问题.(下面假设是我的80端口被占了,如果你不知道你的Tomcat端口是多少就 ...

  10. Git 提交(commit)没有自动生成Change-Id导致无法push

    1). 检查仓储 .git/hook 下面是否有 commit-msg 文件,如果没有可以到下面的地址下载,或者把其他同事的commit-msg文件拷贝到你的.git/hook重新commit即可. ...