List集合
Iterator:
是Java迭代器最简单的实现,
为List设计的ListIterator具有更多的功能,
它可以从两个方向遍历List,也可以从List中插入和删除元素。
List
继承了Collection,是有序的列表。
实现类有ArrayList、LinkedList、Vector、Stack等
1.ArrayList是基于数组实现的,是一个数组队列。可以动态的增加容量!
2.LinkedList是基于链表实现的,是一个双向循环列表。可以被当做堆栈使用!
3.Vector是基于数组实现的,是一个矢量队列,是线程安全的!
4.Stack是基于数组实现的,是栈,它继承与Vector,特性是FILO(先进后出)!
使用场景
在实际的应用中如果使用到队列,栈,链表,首先可以想到使用List。
- 当集合中对插入元素数据的速度要求不高,但是要求快速访问元素数据,则使用ArrayList!
2.当集合中对访问元素数据速度不做要求不高,但是对插入和删除元素数据速度要求高的情况,则使用LinkedList!
3.当集合中有多线程对集合元素进行操作时候,则使用Vector!但是现在BVector现在一般不再使用,如需在多线程下使用, 可以用CopyOnWriteArrayList,在java.util.concurrent包下。
- 当集合中有需求是希望后保存的数据先读取出来,则使用Stack!
ArrayList
练习:往ArrayList中存储自定义对象。person(name,age)
思路:1.描述person
2.定义容器对象。
3.将多个person对象,存储到集合中。
4.取出person对象
//首先创建ArrayList集合对象
List list = new ArrayList();
//然后添加person类型的对像
person p1 = new person("lisi",22);
person p2 = new person("wangmazi",23);
list.add(p1);
list.add(p2);
list.add(new person("lisi3",22));
//取出元素
for(Iterator it = list.iterator();it.hasNext();
//*** it.next();取出的元素都是Object类型的
{
person p = (person)it.next;//需要用到具体对象内容,所以向下转型
System.out.println(it.next();
}
例题:删除数组中的重复元素
A B A B A B A
1 2 3 4 5 6 7
方法一:通过两层for循环进行判断并用remove功能删除
注意:remove会导致数组size减少,也就是说当删除下标3的A时,数组长度编程6,同时B变为3,
此时如果再按照for循环增加计数下标,就会不能遍历到新的下标3,所以要在使用remove
以后将下标集体减少1.
方法二:构建一个新数组,然后进行判断,没有重复元素就将原数组的元素赋值过去。