码迷,mamicode.com
首页 > 其他好文 > 详细

ArrayList的部分用法

时间:2021-02-22 12:51:25      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:基本   迭代   boolean   数组集合   dal   equals   容量   ORC   建议   

ArrayList的用法

用法

构造函数

无参构造(它调用的有参):创建一个默认容量为10的数组

有参构造:根据传入的数组大小创建数组容量

添加

add 添加一个引用类型的元素
Collections.addAll(集合,添加的元素) 添加多个元素

注意:ArrayList不允许添加基本数据类型的元素,但能添加它们的包装类

包装类.parseXXX(字符串) 把字符串转成相应的包装类
String类型中有字母时转数字类型时会报NumberFormatException异常
String类型转成boolean类型时,只要字符串里面不是true,转换后都为false

contains

底层原理是遍历数组集合,用equals判断是否包含,所以自定义的类需要重写equals方法,否则比较不出来(比的地址)

遍历

for

foreach

迭代器

for(Iterator it=list.iterator();it.hasNext();){
	System.out.println(it.next());
}

注意: 一般迭代器建议用一次,因为第一次迭代完,迭代器内部的cursor游标已经走到最后,再次迭代也是从上一次的尾部开始,建议用上方的写法
迭代器迭代过程中不允许修改操作(如删除),因为底层用
checkForComodification()方法进行判断

有两个线程(线程A,线程B),其中线程A负责遍历list、线程B修改list。
-线程A在遍历list过程的某个时候(此时expectedModCount = modCount=N),线程启动,
同时线程B增加一个元素,这是modCount的值发生改变(modCount + 1 = N + 1)。 线程A继续遍历执行next方法时,
通告checkForComodification方法发现expectedModCount = N , 而modCount = N + 1,两者不等,
这时就抛出ConcurrentModificationException 异常,从而产生fail-fast机制。
解决办法:
	使用iterator自己的remove方法
final void checkForComodification() {
      if (modCount != expectedModCount)
      throw new ConcurrentModificationException();//当expectedModCount和modCount的值不同时
   }

删除

remove(int index)

注意:每次删除后,后面的元素会向前补位,每次只删除一个元素

remove(Object obj)

底层根据传入的值和集合中的元素进行euqals比较,所以需要重写兹定义的类的equals方法(谁主张谁举证,删除谁就谁提供euqals方法),和contains一样

clear()

清空集合

ArrayList的部分用法

标签:基本   迭代   boolean   数组集合   dal   equals   容量   ORC   建议   

原文地址:https://www.cnblogs.com/gxh299988/p/14427095.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有
迷上了代码!