list笔记

来源:互联网 发布:查开放房记录软件 编辑:程序博客网 时间:2024/06/05 03:16

概述        

      list在工作中很常见,但是作为一个如此底层的集合,经常还用错,可见我的java功底其实是很薄弱的,特做一下笔记:

       list是一个集合容器,放置同一类对象,其通用的功能对这个对象容器增,减,改,查.

笔记

       以下列举一下容易出错的地方:

  • list中是可以存放同一个对象,list中一些方法涉及到对象之间比较,比如contains,remove,retainAll等,对象之间的比较其实本质上是依赖equals方法的,当list中存放是一个pojo对象时,使用上述方法,是必须要重写equals方法的
  • sublist(int fromIndex, int toIndex)方法,常用这个方法获取list的其中某连续的一段,首先这个方法就有一些前提 fromIndex > =0,toIndex >= fromIndex,toIndex<=size

                a.容易出现的是toIndex>size,要使用这个方法,必须要知道list原有的size,通常在进行数据分批处理或者分页的时候,忽略了这个判断(一定要有空指针,数组越界的意识),

                b.这个方法返回的其实是一个私有内部类sublist,这个sublist里面的对象还是指向原有对象(java中除了一些基本类型,代码中对对象的引用基本都是各种指针,比如new Arraylist(Collection) 集合是新集合,但是集合里面的对象还是原对象),这个返回值只能用lis接收,不能像arraylist等强转

                c.对sublist结果集进行增减(size的变化)都会影响原有list,sublist里面的每一个值,其实都指向原有list,包括其在原有list的位置,操作sublist相当于就是在操作原有list

  • list的遍历有for,超级for,iterator, 遍历中一般是不推荐对list进行size变动的,(除了iterator可以进行删除)

                 a.for:for循环对list的操作list的index,list进行size变动,原有的index对应的值会改变,新增有可能造成死循环,删除可能造成查询越界

                 b.超级for:不允许list size有变动

                 c.iterator:游标式遍历,只能遍历一个删除一个

  • list作为参数,list最为参数时,不要为null,list的方法中,参数为list,基本没有进行非空判断(java jdk中的方法基本没有非空判断,太冗余,非空判断基本都要在业务逻辑中判断),为null会报错

          项目中用list查询偏多,故而常用arraylist,arraylist底层是数组,其扩容就是new 一个更大的数组,将原来的数据复制,因此能指定size的就尽量指定size,对size大的养成用完clear的习惯.arraylist不是线程安全的,要使用线程安全,Collections.synchronizedList(list)即可

         linkedlist用的少,略