怎么遍历ArrayList中的list呢?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么遍历ArrayList中的list呢?相关的知识,希望对你有一定的参考价值。
list中有已经存了数据,那么我把这个list放在了一个arraylist中,那么我怎么遍历得到我list中的数据呢
对List的遍历有三种方式List<A> list = new ArrayList<A>();
list.add(new A());
list.add(new A());
...
第一种:
for(Iterator<A> it = list.iterator(); it.hasNext(); )
....
这种方式在循环 执行过程中会进行数据锁定, 性能稍差, 同时,如果你想在寻欢过程中去掉某个元素,只能调用it.remove方法, 不能使用list.remove方法, 否则一定出并发访问的错误.
第二种:
for(A a : list)
.....
内部调用第一种, 换汤不换药, 这种循环方式还有其他限制, 不建议使用它
第三种:
for(int i=0; i<list.size(); i++)
A a = list.get(i);
...
内部不锁定, 效率最高, 但是当写多线程时要考虑并发操作的问题! 参考技术A protected void Page_Load(object sender, EventArgs e)
//这是你想要要入进入的Arraylist
ArrayList al = new ArrayList();
al.Add(1);
al.Add("haha");
//下面这个是你的list
ArrayList list = new ArrayList();
list.Add("dsfasdf");
list.Add(1.23);
//将list压入al中
al.Add(list); //将list从al中取出来
foreach (object obj in al)
ArrayList list1 = obj as ArrayList;
if (list1 != null)
Response.Write("取到我要的list了");
楼主可以测试 不清楚再问 参考技术B static void Main(string[] args)
string[] str = "wwe", "sfsd" ;
// System.Collections.ArrayList arr = new System.Collections.ArrayList(str);
System.Collections.ArrayList arr = new System.Collections.ArrayList();
arr.AddRange(str);
arr.Add("sdfsfs");
arr.Add("str");
for (int i = 0; i < arr.Count; i++)
Console.WriteLine(arr[i].ToString());
Console.WriteLine("\n");
foreach (object o in arr)
Console.WriteLine(o.ToString() + " ");
Console.WriteLine("\n");
System.Collections.IEnumerator ie = arr.GetEnumerator();
while (ie.MoveNext())
Console.WriteLine(ie.Current.ToString() + " ");
参考技术C 前者很仔细讲的,就是它
集合之List和Set
集合之List和Set
Collection下的子接口:List、Set
一、List
List集合下最常见的集合类有两个:ArrayList和LinkedList
众所周知,ArrayList底层是数组,LinkedList底层是链表。数组遍历速度快,LinkedList增删元素快。
1.1、为什么在工作中一般就用ArrayList,而不用LinkedList呢?
原因也很简单:
1)在工作中,遍历的需求比增删多,即便是增加元素往往也只是从尾部插入元素,而ArrayList在尾部插入元素也是O(1)
2)ArrayList增删没有想象中慢,ArrayList的增删底层调用的copyOf()被优化过,加上现代CPU对内存可以块操作,普通大小的ArrayList增删比LinkedList更快。
1.2、如果考虑到线程安全的问题,
1)那Vector我们也一般不用,
2)可以看看CopyOnWriteArrayList,它是JUC下的一个类,但开发用的不多,但还是可以了解一下它的思想(写时拷贝)
3)实际开发常用的方法为 List synlist = Collections.synchronizedList(list),这样我们就可以无忧的增删操作了
但是,在使用迭代遍历的时候,还需要我们自行处理线程安全问题
1.3、那么,LinkedList用在什么地方呢?
我们一般用在刷算法题上。把LinkedList当做一个先进先出的队列,LinkedList本身就实现了Queue接口
二、Set
Set集合下最常见的集合类有三个:HashSet、TreeSet、LinkedHashSet
List和Set都是集合,一般来说:如果我们需要保证集合的元素是唯一的,就应该想到用Set集合
2.1、一般我们在开发中最多用到的也就是HashSet。
1)TreeSet是可以排序的Set,一般我们需要有序,从数据库拉出来的数据就是有序的,可能往往写order by id desc比较多。
2)而在开发中也很少管元素插入有序的问题,所以LinkedHashSet一般也用不上。
3)那么,TreeSet和LinkedHashSet更多的可能用在刷算法的时候。
2.2、如果考虑线程安全的问题,
1)可以考虑CopyOnWriteArraySet,用得就更少了(这是一个线程安全的Set,底层实际上就是CopyOnWriteArrayList)
2)所以还可以考虑使用:Collections.synchronizedSet()
三、结论:
1)ArrayList始终比HashSet性能要高(因为:HashSet每次添加总要判断hashcode导致效率低)
2)HashSet两种循环中iterator 方式不稳定,不过总是比foreach要快一点
以上是关于怎么遍历ArrayList中的list呢?的主要内容,如果未能解决你的问题,请参考以下文章
菜鸟求教,arraylist里面放数组,应该怎么遍历?如下:
求教arraylist里面放map,怎么循环遍历得到map里面的数据,如:List<Map<String, String>> list = new Ar