遍历arraylist数组(用ArrayList存放数组,怎么查询含有指定元素的数组并显示出来)

2024-01-19 00:50:02 :43

遍历arraylist数组(用ArrayList存放数组,怎么查询含有指定元素的数组并显示出来)

“遍历arraylist数组”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看遍历arraylist数组(用ArrayList存放数组,怎么查询含有指定元素的数组并显示出来)!

本文目录

用ArrayList存放数组,怎么查询含有指定元素的数组并显示出来

遍历arraylist 在遍历 数组,找出含有元素‘a’的数据,然后记录该数组在arrayList的位置 在break

java遍历Arraylist比较大小:

直接访问ArrayList中的每个元素是不行的,因为ArrayList不可以实现随机访问。有一个办法:定义一个数组,比如;List《Integer》 l=new ArrayList《Integer》();int arr=l.get(i);}通过for循环取出ArrayList中的每个元素,存放在数组中,那么通过数组比较就容易了,因为数组通过下标可以方便的访问。

C# 怎么把ArrayList数组进行循环

你做一个主程序,嵌套如下程序:

ArrayList l = new ArrayList();l.Add(1);l.Add(2);             //添加测试数据int a = 0;for (int i = 0; i 《 l.Count; i++){a=(int)l;             //遍历,并且赋值给了a}

1、什么是ArrayList

ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处:

动态的增加和减少元素

实现了ICollection和IList接口

灵活的设置数组的大小

2、如何使用ArrayList

最简单的例子:

?

12345678ArrayList List = new ArrayList();for( int i=0;i 《10;i++ ) //给数组增加10个Int元素List.Add(i);//..程序做一些处理List.RemoveAt(5);//将第6个元素移除for( int i=0;i 《3;i++ ) //再增加3个元素List.Add(i+20);Int32)List.ToArray(typeof(Int32));//返回ArrayList包含的数组

这是一个简单的例子,虽然没有包含ArrayList所有的方法,但是可以反映出ArrayList最常用的用法

3、ArrayList重要的方法和属性

1)构造器

ArrayList提供了三个构造器: public ArrayList(); 默认的构造器,将会以默认(16)的大小来初始化内部的数组 public ArrayList(ICollection); 用一个ICollection对象来构造,并将该集合的元素添加到ArrayListpublic ArrayList(int); 用指定的大小来初始化内部的数组

2)IsSynchronized属性和ArrayList.Synchronized方法

IsSynchronized属性指示当前的ArrayList实例是否支持线程同步,而ArrayList.Synchronized静态方法则会返回一个ArrayList的线程同步的封装。

如果使用非线程同步的实例,那么在多线程访问的时候,需要自己手动调用lock来保持线程同步

JSP页面中怎么遍历arraylist中的数组数据

有两种方法,第一种的话,用迭代器ArrayList arrli=new ArrayList();for(Iterator is=arrli.iterator();is.next()){System.out.println(is.next());}第二种方法是采用struts标签中的《logic:iterator》进行遍历,这个相对简单些。其中name属性代表后台传来的list结果集属性名。《logic:iterate id="rn" name="rl"》《tr》《th》《input type="checkbox" id="e" name="e" value="${rn.id}"》《/th》《th》《%= index %》《/th》《th》${rn.CId}《/th》《th》《span style="cursor:hand" onclick="opensreach(’linkman.do?os=links&haha=${rn.id}’)"》${rn.CName}《/span》《/th》《th》《html:button property="s1" value="删除" onclick="return chooseaction(’shanchu’,${rn.id})"/》《html:button property="s2" value="修改" onclick="choo(’myinit’,${rn.id})"/》《/th》《/tr》《/logic:iterate》如有其他疑问可以说下,呵呵。

ArrayList 使用 forEach 遍历时删除元素会报错吗

ArrayList使用forEach遍历的时候删除元素会报错吗? 其实不一定,如果删除的元素是倒数第二个则不会报错, 否则报错ConcurrentModificationException。 案例: List《String》 lists = new ArrayList《String》(); lists.add("1"); lists.add("2"); lists.add("3"); lists.add("4"); 如果要删除等于“3”的元素,我们都知道ArrayList底层是类似数组的形式才存储数据的,生成一个元素后,后面的元素要往前移动,同时lists的size减1。这时lists变成,大小为3。 使用forEach遍历时: for(String s :lists){ if(s.equals("3")){ lists .remove(s);    }} //这是一颗语法糖,编译后相当于:for(Iterator i = lists.iterator();i.hasNext();){String s = (String)i.next();if(s.equals("3")){ list .remove(s);}} Iterator的hasNext()方法判断了size和当前下标cursor是否一样,一样则说明已经没有元素了。 如果remove了“3”这个元素之后,size会变成3,这时候遍历的下标cursor刚好是3,因此不会再进行下一次循环,直接结束了,此时元素“4”是没有被遍历到的。 假如lists中的元素是,即3不再是倒数第二个元素了呢? 此时会进行下一次循环,先判断i.hasNext(),发现当前下标cursor不等于size,执行i.next(),试图取出下一个值“4”,这时候就报错了,原因在i.next()中: public E next() {     checkForComodification();     int i = cursor;     if (i 》= size)         throw new NoSuchElementException();     Object elementData = ArrayList.this.elementData;     if (i 》= elementData.length)         throw new ConcurrentModificationException();     cursor = i + 1;     return (E) elementData; } final void checkForComodification() {     if (modCount != expectedModCount)       throw new ConcurrentModificationException(); } Iterator取下一个值时候会先判断modCount是否和expectedModCount一样,不一样就报错。     这里的modCount是删除的元素的数量计数,expectedModCount是Iterator期望的删除数量,使用Iterator的remove()方法的时候,Iterator会将调用ArrayList.this.remove(lastRet)删除元素同时使得modCount++,然后将modCount的值赋给expectedModCount,确保它们一样。 所以到这里我们就可以发现问题了,在forEach循环体里,我们直接使用的是lists.remove(“3”)的方法来删除元素,导致了expectedModCount和modCount不一致。 所以要在遍历的时候删除元素,不能使用forEach遍历的方式,要使用Iterator的方法。 String s= null; for(Iterator i = lists.iterator(); i.hasNext(); ){   s=(String)i.next();   if(s.equals("3")){       i.remove();   } } 还有一种方法是使用CopyOnWriteArrayList代替ArrayList,这是一种写时复制的容器,每次添加删除元素的时候都会复制一份旧的数据,新建一个新数据,在新数据进行修改后再修改旧数据的指针指到新数据。这样的话,遍历的数据其实都是第一份的旧数据,旧数据是没有变的,我们使用旧数据遍历,使用新数据判断值。 图:

Java中遍历ArrayList的过程中删除元素操作会发生并发修改异常

首先搞清楚不是x=n-1不报错。是因为他避开了错误,实际当你用倒数第2个来删除的时候,他就已经跳出循环,不会判断最后以为,这是为什么呢?

我们先看看加强for循环是怎么实现的。都知道是通过迭代实现,那么将for写成迭代器来看。

        Iterator《Object》 itr = al.iterator();            while(itr.hasNext()){                Object o = itr.next();                System.out.println(itr.hasNext());                if("n" .equals(o)){                al.remove(o);            }        }

以上就是加强for循环的真正样子。再来透析源代码。

al.iterator():返回一个迭代器没什么好说的;

itr.hasNext():通过判断 cursor(游标) != size(长度)来决定是否结束循环,cursor(游标) 初始是0 每次经过 itr.next() +1;当cursor==size时 会跳出循环,这也是为什么倒数第2个不会出错的主要原因; 

itr.next(): 看源代码可以发现每次在next()调用后,都会先调用checkForComodification()这个方法;

checkForComodification(): 主要作用是判断itr迭代器数据是否和list一致,

有两个参数,

第一个 modCount 集合结构变动次数,如:一开始你add调用了7次,那么这个数就是7,

第二个 expectedModCount 在调用iterator()方法时,初始化值等于modCount ,

这个方法判断当 modCount != expectedModCount 时

抛出异常ConcurrentModificationException,如果你调用迭代器的remove方法,expectedModCount 会重新赋值,但是你调用的是list的remove方法,那么modCount 就会+1 而expectedModCount 不变,这就会造成 modCount != expectedModCount;

最后,看看为什么倒数第2个不会抛异常:

当他遍历到“n-1”时,cursor=6,然后调用remover(o)方法,size=6,这个时候调用了itr.hasNext()判断 cursor是否等于size,前面说过,当cursor==size时,跳出循环,那么就不会进入next(),也就不会进入checkForComodification()方法,所以不会抛出异常,说白了,也就是循环次数少了一次。

结合着源码看,应该会比较清晰。

菜鸟求教,arraylist里面放数组,应该怎么遍历如下:

String;for(int i=0;i《array.length;i++){ prize_arr.add(array); str = array; }

JAVA编程题目: ArrayList存储任意三个字符串,并遍历(迭代器遍历)

import java.util.ArrayList;import java.util.Iterator;public class Test {public static void main(String args) {ArrayList《String》 a = new ArrayList《String》();a.add("ABC");a.add("DEF");a.add("XYZ");//写法1for (Iterator《String》 i = a.iterator();i.hasNext();) {String e = i.next();System.out.println(e);}//写法2for (String i : a) {System.out.println(i);}} }

java多线程同时向一个数组arraylist添加元素,遍历这个集合

ArrayList集合是不行的,如果多线程同时添加元素,有可能产生线程安全问题,程序也有可能报错。例如:一个线程正准备往进去写数据,突然切到另一个线程它先写了进入,在切回来这个线程并不知道这个位置已经写入了数据,所以它还是会傻傻的写入数据,这样另一个线程的数据就被覆盖了。如果是一边添加 ,一边遍历的话程序会产生ConcurrentModificationException异常。所以要用copyonwritearraylist是最好的选择,但是注意的是,添加元素时它的性能不是很好 。

如果你还想了解更多这方面的信息,记得收藏关注本站。

遍历arraylist数组(用ArrayList存放数组,怎么查询含有指定元素的数组并显示出来)

本文编辑:admin
Copyright © 2022 All Rights Reserved 威海上格软件有限公司 版权所有

鲁ICP备20007704号

Thanks for visiting my site.