Arrays.asList()需要注意的点
千万不要这样使用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()需要注意的点的更多相关文章
- 【转】java.util.Arrays.asList 的用法
DK 1.4对java.util.Arrays.asList的定义,函数参数是Object[].所以,在1.4中asList()并不支持基本类型的数组作参数. JDK 1.5中,java.util.A ...
- Arrays.asList()注意
api: public static <T> List<T> asList(T... a) 返回一个受指定数组支持的固定大小的列表.(对返回列表的更改会“直接写”到数组.)此方 ...
- Arrays.toString Arrays.asList
import java.util.Arrays; public class TestCalc{ public static void main(String[] args) { ,,,,,,,}; / ...
- Arrays.asList()使用注意点
今天看代码时, 发现书上使用了Arrays.asList()方法, 将一个数组转成了List, 然后说到得到的List不能调用add(), remove()方法添加元素或者删除,带着疑问看了下内部实现 ...
- Arrays.asList(数组) 解说
最近在用Arrays的asList()生成的List时,List元素的个数时而不正确. Java代码 一:Arrays.asList(数组)该方法是将数组转化为集合(该方法主要用于Object对象数组 ...
- Arrays.asList方法总结
import java.util.Arrays; import java.util.List; /** * * 本类演示了Arrays类中的asList方法 * 通过四个段落来演示,体现出了该方法的相 ...
- Arrays.asList的使用及异常问题
将数组转成List问题,通常我们习惯这样写成:List<String> list = Arrays.asList("1","2"); 于是我们这样就 ...
- Arrays.asList引起的惨案
最近代码中需要对两个数组求交,想当然便用到了List中的retainAll函数,但要将将数组转换成list.代码如下: String[] abc = new String[] { "abc& ...
- Arrays.asList的源码分析
以前一直很奇怪为什么Arrays.asList的数组不能插入新的数据,后来看了源码发现是因为内部是一个final的数组支持起来的Arraylist,下面贴入源码与分析. 1.先看Arrays的方法 我 ...
- 【转载】最近在用Arrays的asList()生成的List时,List元素的个数时而不正确,数组转化为List,即Arrays.asList(intArray);
最近在用Arrays的asList()生成的List时,List元素的个数时而不正确. Java代码 //经多次测试,只要传递的基本类型的数组,生成List的元素个数均为1 char arrc = { ...
随机推荐
- 【python学习】数据结构第一节
1.访问元组或列表中的值 (注:元素是从0开始从左往有编号的,或者从右向左编号[-1开始]) 列表 x1 = [1,2,3,4] 元组 x2 =(1,2,3,4) print(x2[0]) ...
- linux改变用户属主
将test文件的属主改为root:sudo chown root test 改变所在组:sudo chgrp root test 同时改变属主和所在组:sudo chown root.root tes ...
- [BOM]实现页面loading效果,在图片资源加载完之前显示loading
使用到jquery. 判断整个页面是否加载完: // 这是根据js判断,页面加载完毕就显示 window.onload = function () { // console.log('load com ...
- 目标检测yolov5检测火龙果
一.github官方网址 https://github.com/ultralytics/yolov5/tree/v6.1 二.labelme标记数据集: (1).进入虚拟环境 (2).pip inst ...
- HCIA-ICT实战基础12-网络设备安全特性
HCIA-ICT实战基础-网络设备安全特性 目录 常见设备安全加固策略 网络设备安全加固部署示例 本机防攻击配置 1 常见设备安全加固策略 1.1 为什么需要网络设备安全 网络安全是一个系统工程, 网 ...
- Java-Excel表数据转List对象->导入数据库
1 import java.io.File; 2 import java.io.FileInputStream; 3 import java.util.ArrayList; 4 import java ...
- C# 屏蔽词过滤
参考:https://www.cnblogs.com/kubidemanong/p/10834993.html public class TreeNode { public char Char; pu ...
- 冰冻三尺非一日之寒,记录Java
一.数据类型 Java是一种强类型语言,什么是强类型语言? 强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用 Java的数据类型又分为两大类: 1.基本类型:基本类型有分为数值 ...
- Mysql-------查询各科成绩前三名的记录
查询各科成绩前三名的记录 分析如下: 1 select s.* from (select distinct Student.*,a.c_id, a.s_score, count( distinct b ...
- CSS中Position几种属性的总结
定位position 定位方向:left right top bottom 静态定位:static 默认值,就是文档流 绝对定位:absolute 特点: 1.不占据原来的位置(脱标) ...