java的java arraylist 遍历使用方法

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(16487)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_085068',
blogTitle:'Java中的ArrayList的容量',
blogAbstract:'List接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。ArrayList继承于List接口,除继承过来的方法外,还提供一些方法来操作内部用来存储列表的数组的大小。每个ArrayList实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单。
ArrayList是经常会被用到的,一般情况下,使用的时候会像这样进行声明:List arrayList = new ArrayList();如果像上面这样使用默认的构造方法,初始容量被设置为10。当ArrayList中的元素超过10个以后,会重新分配内存空间,使数组的大小增长到16。',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:7,
publishTime:9,
permalink:'blog/static/',
commentCount:1,
mainCommentCount:1,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}Java ArrayList用法入门
Java ArrayList用法入门
  ArrayList用法:  ArrayList是接口List的实现类,所以推荐以List接口来使用。   1、创建ArrayList的List接口  例:  List books = new ArrayList();  Java支持泛形后,创建的同时可以指定元素的类型。  例:    Class Book {  ......  }  List&Book& books = new ArrayList&Book&();  为避免容器自动扩容的次数而影响性能,可以指定创建时的元素大小。  例: 创建可容纳100个Book对象的ArrayList,超过100个将自动扩容  List&Book& books = new ArrayList&Book&(100);  2、添加元素  添加在末尾  例:    Book book1 = new Book();  Book book2 = new Book();  Book book3 = new Book();  books.add(book1);  books.add(book2);  books.add(book3);  添加在指定索引处  例:    // 虽然加book1后直接加book3了,但book2是被加在索引1的地方  // 所以效果同上,是book1、book2、book3的顺序  books.add(book1);  books.add(book3);  books.add(1, book2);  3、 获取ArrayList中元素的个数  例:  int count = books.size();  4、读取元素  利用普通的for循环:  例:    for (int i = 0; i & books.size(); i++ {  Book newBook = books.get(i);  // 不带泛形的注意要转型  Book book = (Book) books.get(i);  System.out.println(book.getName());  }
  利用for循环的新特性:  例:    for (Book book : books) {  // 用book就能访问了  System.out.println(book.getName());  }  利用枚举:  例:    Iterator&Book& iter = erator();  while (iter.hasNext()) {  Book book = iter.next();  System.out.println(book.getName());  }  5、移除元素  移除指定索引处的元素  例:    books.remove(0); // 移除book1  books.remove(1); // 移除book2  books.remove(2); // 移除book3  移除指定对象的所在元素  例:  Book delBook = books.get(1);  books.remove(delBook); // 移除book2  移除所有元素  例:  books.clear();  6、判断ArrayList是否为空(没有元素)  原方法:  if (books.isEmpty()) {  }  直接判断大小:  if (books.size() == 0) {  }   7、判断ArrayList中是否已经存在了某对象  例:  // 判断是否已经存在book2对象  if (ntains(book2)) { // 已经存在  }   8、根据对象反查询它的索引位置  从前住后查询,反回第一个符合条件的位置  例:  list.indexOf(book2); // 查询book2对象的索引位置  从后住前查询,反回第一个符合条件的位置  例:  list.lastIndexOf(book2); // 查询book2对象的索引位置  以上这些掌握后,基本就没问题了。
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
职称考试题目
招生信息考研政治
网络安全安全设置工具使用手机安全
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&中国领先的IT技术网站
51CTO旗下网站
Java ArrayList删除特定元素的方法
ArrayList是最常用的一种java集合,在开发中我们常常需要从ArrayList中删除特定元素。
作者:来源:codeceo| 11:42
ArrayList是最常用的一种java集合,在开发中我们常常需要从ArrayList中删除特定元素。有几种常用的方法:
最朴实的方法,使用下标的方式:
ArrayList&al&=&new&ArrayList();&&al.add(&a&);&&al.add(&b&);&&&&&&&&for&(int&i&=&0;&i&&&al.size();&i++)&{&&if&(al.get(i)&==&&b&)&{&&al.remove(i);&&i--;&&}&&}&
在代码中,删除元素后,需要把下标减一。这是因为在每次删除元素后,ArrayList会将后面部分的元素依次往上挪一个位置(就是copy),所以,下一个需要访问的下标还是当前下标,所以必须得减一才能把所有元素都遍历完
还有另外一种方式:
ArrayList&al&=&new&ArrayList();&&al.add(&a&);&&al.add(&b&);&&al.add(&b&);&&al.add(&c&);&&al.add(&d&);&&for&(String&s&:&al)&{&&if&(s.equals(&a&))&{&&al.remove(s);&&}&&}&
此处使用元素遍历的方式,当获取到的当前元素与特定元素相同时,即删除元素。从表面上看,代码没有问题,可是运行时却报异常:
Exception&in&thread&&main&&java.util.ConcurrentModificationException&&at&java.util.ArrayList$Itr.checkForComodification(ArrayList.java:886)&&at&java.util.ArrayList$Itr.next(ArrayList.java:836)&&at&com.mine.collection.TestArrayList.main(TestArrayList.java:17)&
从异常堆栈可以看出,是ArrayList的迭代器报出的异常,说明通过元素遍历集合时,实际上是使用迭代器进行访问的。可为什么会产生这个异常呢?打断点单步调试进去发现,是这行代码抛出的异常:
final&void&checkForComodification()&{&&if&(modCount&!=&expectedModCount)&&throw&new&ConcurrentModificationException();&&}&
modCount是集合修改的次数,当remove元素的时候就会加1,初始值为集合的大小。迭代器每次取得下一个元素的时候,都会进行判断,比较集合修改的次数和期望修改的次数是否一样,如果不一样,则抛出异常。查看集合的remove方法:
private&void&fastRemove(int&index)&{&&modCount++;&&int&numMoved&=&size&-&index&-&1;&&if&(numMoved&&&0)&&System.arraycopy(elementData,&index+1,&elementData,&index,&&numMoved);&&elementData[--size]&=&null;&&&}&
可以看到,删除元素时modCount已经加一,但是expectModCount并没有增加。所以在使用迭代器遍历下一个元素的时候,会抛出异常。那怎么解决这个问题呢?其实使用迭代器自身的删除方法就没有问题了
ArrayList&al&=&new&ArrayList();&&al.add(&a&);&&al.add(&b&);&&al.add(&b&);&&al.add(&c&);&&al.add(&d&);&&Iterator&iter&=&al.iterator();&&while&(iter.hasNext())&{&&if&(iter.next().equals(&a&))&{&&iter.remove();&&}&&}&
查看迭代器自身的删除方法,果不其然,每次删除之后都会修改expectedModCount为modCount。这样的话就不会抛出异常
public&void&remove()&{&&if&(lastRet&&&0)&&throw&new&IllegalStateException();&&checkForComodification();&&try&{&&ArrayList.this.remove(lastRet);&&cursor&=&lastR&&lastRet&=&-1;&&expectedModCount&=&modC&&}&catch&(IndexOutOfBoundsException&ex)&{&&throw&new&ConcurrentModificationException();&&}&&}&
建议以后操作集合类的元素时,尽量使用迭代器。可是还有一个地方不明白,modCount和expectedModCount这两个变量究竟是干什么用的?为什么集合在进行操作时需要修改它?为什么迭代器在获取下一个元素的时候需要判断它们是否一样?它们存在总是有道理的吧
其实从异常的类型应该是能想到原因:ConcurrentModificationException.同时修改异常。看下面一个例子
List&list&=&new&ArrayList();&&&&list.add(&Value1&);&&list.add(&Value2&);&&list.add(&Value3&);&&&&Iterator&ite&=&list.iterator();&&Iterator&ite2&=&list.iterator();&&&&ite.next();&&ite.remove();&&&&ite2.next();&&ite2.remove();&
同样的,也会报出ConcurrentModificationException。【编辑推荐】【责任编辑: TEL:(010)】
大家都在看猜你喜欢
头条头条热点热点热点
24H热文一周话题本月最赞
讲师:1人学习过
讲师:25人学习过
讲师:0人学习过
精选博文论坛热帖下载排行
本书详细介绍脚本语言Groovy,首先介绍Groovy语言的基本特性,包括讨论Groovy方法、程序闭包、列表、映射以及对类和继承的支持,然后介绍如...
订阅51CTO邮刊

我要回帖

更多关于 java arraylist的方法 的文章

 

随机推荐