首页 > 其他分享 >Arrays 转 list 5 大坑

Arrays 转 list 5 大坑

时间:2023-06-28 17:33:25浏览次数:45  
标签:大坑 Arrays list ArrayList List ints asList

1.如果是基本类型,他代表是一个对象,所以size是1  改正:改成包装类:Integer
public static void main(String[] args) { int[] a={1,2,3}; List ints = Arrays.asList(a); System.out.println(ints.size()); // 1 ints.forEach(x-> System.out.println(x));// [I@68f7aae2 }

 

2.如果修改了数组的值,遍历list的时候,值也会改变,地址引用
public static void main(String[] args) { Integer[] a={1,2,3}; List ints = Arrays.asList(a); a[0]=10; ints.forEach(x-> System.out.println(x));// 10,2,3 }

 

3.asList的数组无法进行,添加删除操作,只能查看,因为他自身是一内部类,里卖没有重写add方法,所以执行的是父类的AbstractList的add方法
而父类的add方法就是直接报错
public static void main(String[] args) {
        Integer[] a={1,2,3};
        List ints = Arrays.asList(a);
        ints.add(4);// java.lang.UnsupportedOperationException
}

 

4.对于subList得到的数组无法强制转换成ArrayList,SubList是ArrayList的一个内部类 Sublist只是一个ArrayList的一个视图,所以转换失败
但是用List是可以正常转换的
public static void main(String[] args) { Integer[] a={1,2,3}; List ints = Arrays.asList(a); ArrayList list = (ArrayList)ints.subList(0, 1);
     // List list = ints.subList(0, 1);正常 同时如果修改ints数组的值,sublist的数组也会改变,因为也只是地址引用关系
        list.forEach(x-> System.out.println(x));// java.lang.ClassCastException: java.util.RandomAccessSubList cannot be cast to java.util.ArrayList
}

 

5 对于上面问题,sublist可能会造成OOM

因为sublist截取之后,原数组无法被回收,会一直在内存中

解决:用new ArrrayList来接收返回的sublist数组

 

标签:大坑,Arrays,list,ArrayList,List,ints,asList
From: https://www.cnblogs.com/foreverstudy/p/17511939.html

相关文章

  • C# ListBox 打印日志
    LvLogHelper.GetInstance(this.lbLog).PrintLog("初始化程序完成");LvLogHelper.GetInstance().PrintLog("请连接综测仪表");LvLogHelper.GetInstance().PrintLog("请加载测试用例");usingSystem;usingSystem.IO;usingSystem.Runtim......
  • ADO控件:显示数据(CListCtrl)
    //TODO:Addextrainitializationhere m_listLinkInfo.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); inti=0; m_listLinkInfo.InsertColumn(i++,"ID", LVCFMT_LEFT,90); m_listLinkInfo.InsertColumn(i++,"Name", LVCFMT_LE......
  • chrome.runtime.onMessage.addListener sendResponse
    Ifmultiplepagesarelisteningfor onMessage events,onlythefirsttocall sendResponse() foraparticulareventwillsucceedinsendingtheresponse.Allotherresponsestothateventwillbeignored.如果多个页面正在监听onMessage事件,则只有第一个为特定......
  • redis压缩列表ziplist
     压缩列表(ziplist)是Redis的一种内存紧凑型的数据结构,它是一个字节数组,可以包含任意多个元素,每个元素可以是一个字节数组或一个整数。压缩列表的结构由多个字段组成,包括zlbytes(压缩列表的字节长度),zltail(压缩列表尾元素的偏移量),zllen(压缩列表的元素数目),entryX(压缩列表存储的......
  • list分组--根据某一个字段分组
    List分组--对象List分组--MapList分组List里面的对象元素,以某个属性来分组,例如,以id分组,将id相同的放在一起//List以ID分组Map<Integer,List<Apple>>Map<Integer,List<Apple>>groupBy=appleList.stream().collect(Collectors.groupingBy(Apple::getId));System.err.pri......
  • Java求和元素_实现一个List集合中的某个元素的求和
    Listuserlist=userService.findAll();Integersum=userlist.stream().collect(Collectors.summingInt(User::getAge));packagecom.example.list_test;importjava.util.ArrayList;importjava.util.List;/***描述:ListTest3**@author何志鹏*@ClassName......
  • List排序
    List排序//按照某个字段进行正序排序list.sort((x,y)->Integer.compare(Integer.valueOf(x.getCourseDuration()),Integer.valueOf(y.getCourseDuration())));//按照某个字段进行倒序排序list.sort((x,y)->Integer.compare(Integer.valueOf(y.getCourseDuration()),Integer.......
  • 织梦 channelartlist 支持 limit 属性使用
    查找字段:$attlist='typeid|0,row|20,cacheid|';替换为:$attlist='typeid|0,row|20,cacheid|'; 效果图: 在“$dsql->SetQuery”前面添加$limit=trim(preg_replace('#limit#is','',$limit));if($limit!='')$limitsql="L......
  • 取list中某一段连续元素
    importjava.util.List;publicclassListUtils{/***取list中某一段连续元素**@paramlist*@parambeginIndex*@paramendIndex*@return*/publicstatic<T>List<T>fetchElementFromList(List<T>lis......
  • Arrays.asList()与Collections.unmodifiableList()
    java.util.Arrays#asList返回的是在Arrays实现的ArrayList,privatestaticclassArrayList<E>extendsAbstractList<E>implementsRandomAccess,java.io.Serializable{privatestaticfinallongserialVersionUID=-2764017481108945198L;......