1. List集合共性方法
collection
下面有:
List
:元素的有序的,元素可以重复,因为该集合体系有索引Set
: 元素是无序,元素不可以重复
List特有方法:凡是可以操作角标的方法都是该体系特有的方法。
- 增:
add(index, element);
addAll(index, Collection);
- 删:
remove(index);
- 改:
set(index, element);
- 查:
get(index);
subList(from, to);
listIterator();
package collectionDemo;
import java.util.ArrayList;
import java.util.Iterator;
public class ListDemo {
public static void main(String[] args) {
ArrayList al = new ArrayList();
//1.添加元素
al.add("java1");
al.add("java2");
al.add("java3");
sop("初始化为:"+al);
//在指定位置添加元素
al.add(1,0);
sop("在位置1处添加元素:"+al);
//2. 删除指定位置的元素
al.remove(0);
sop("删除位置0处的元素:"+al);
//3. 修改元素
al.set(1,"shh");
sop("修改位置1处的元素:"+al);
//4. 通过角标获取元素
sop("获得位置1处的元素:"+al.get(1));
//获取所有元素
sop("获取所有元素..................");
for(int x=0; x<al.size(); x++){
sop("al["+x+"]:"+al.get(x));
}
sop("通过迭代器获取所有元素..................");
Iterator it = al.iterator();
while (it.hasNext()){
sop(it.next());
}
}
public static void sop(Object obj){
System.out.println(obj);
}
}
结果;
初始化为:[java1, java2, java3]
在位置1处添加元素:[java1, 0, java2, java3]
删除位置0处的元素:[0, java2, java3]
修改位置1处的元素:[0, shh, java3]
获得位置1处的元素:shh
获取所有元素..................
al[0]:0
al[1]:shh
al[2]:java3
通过迭代器获取所有元素..................
0
shh
java3
2. ListIterator
ListIterator:在迭代过程中,对元素进行增删改查。
package collectionDemo;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListDemo {
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add("java0");
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
//通过indexOf()获取对象的位置
sop("index="+al.indexOf("java2"));
//subList
List sub = al.subList(1,3);
sop("sub="+sub);
//在迭代过程中,准备添加或者删除元素
Iterator it = al.iterator();
while (it.hasNext()){
Object obj = it.next();
if(obj.equals("java2")){
//al.add("java008"); 会产生ConcurrentModificationException异常
it.remove(); // 将java2的引用从集合中删除了,Iterator提供的方法太少
}
}
sop(al);
}
public static void sop(Object obj){
System.out.println(obj);
}
}
在迭代过程中,想对元素进行操作:
- 在迭代器迭代的过程中,不能使用集合的方法,否则会产生ConcurrentModificationException异常
- 只能使用迭代器的方式
- 可以使用Iterator提供的方法,但是提供的方法太少,只有判断和删除的操作
- 列表迭代器
ListIterator
的方法相对就多一些,可以对元素进行删除,修改等。
List集合特有的迭代器:ListIterator
,它是Iterator的子接口
package collectionDemo;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class ListDemo {
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add("java0");
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
//在迭代过程中,准备添加或者删除元素
ListIterator li = al.listIterator();
while (li.hasNext()){
Object obj = li.next();
if(obj.equals("java2")){
li.add("java009");
}
}
sop(al);
sop("hasNext:"+li.hasNext());
sop("hasPrevious:"+li.hasPrevious());
sop("..............................");
while (li.hasPrevious()){
sop("pre::"+li.previous());
}
}
public static void sop(Object obj){
System.out.println(obj);
}
}
输出:
[java0, java1, java2, java009, java3, java4]
hasNext:false
hasPrevious:true
..............................
pre::java4
pre::java3
pre::java009
pre::java2
pre::java1
pre::java0
3. List集合具体对象的特点
collection
下面有:
List
:元素的有序的,元素可以重复,因为该集合体系有索引
______ArrayList
:底层的数据结构使用的是数组结构。特点:查询速度很快,但是增删速度慢
______LinkedList
:底层的数据结构使用的是链表结构。特点:查询速度慢,但是增删速度快
______Vector
:底层的数据结构使用的是数组结构,线程同步,被ArrayList替代了Set
: 元素是无序,元素不可以重复
4. Vector中的枚举
枚举就是Vector特有的取出的方式。
- 发现枚举和迭代器很像
- 其实枚举和迭代器是一样的
- 因为枚举的名称以及方法的名称都过长
- 所以被迭代器取代了
- 枚举郁郁而终了!!!!
package collectionDemo;
import java.util.Enumeration;
import java.util.Vector;
public class VectorDemo {
public static void main(String[] args) {
Vector v = new Vector();
v.add("java1");
v.add("java2");
v.add("java3");
v.add("java4");
Enumeration en = v.elements();
while (en.hasMoreElements()){
sop(en.nextElement());
}
}
public static void sop(Object obj){
System.out.println(obj);
}
}
5. LinkedList
LinkedList
特有的方法:
addFirst();
addLast();
getFirst();
:get获取元素,但是不删除元素getLast();
removeFirst();
:remove获取元素,但是删除元素。如果集合中没有元素,会出现NoSuchElementException异常removeLast();
在JDK1.6之后,为了避免抛出异常,出现了代替get和remove的方法:
offerFirst();
offerLast();
peekFirst();
peekLast();
package collectionDemo;
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList link = new LinkedList();
link.addFirst("java1");
link.addFirst("java2");
link.addFirst("java3");
link.addFirst("java4");
sop(link);
sop(".............get................");
sop("getFirst:"+link.getFirst());
sop("getLast:"+link.getLast());
sop(link);
sop("..............remove...............");
sop("removeFirst:"+link.removeFirst());
sop("removeLast:"+link.removeLast());
sop(link);
sop(".............取出列表所有元素................");
while (!link.isEmpty()){
sop(link.removeFirst());
}
}
public static void sop(Object obj){
System.out.println(obj);
}
}
输出:
[java4, java3, java2, java1]
.............get................
getFirst:java4
getLast:java1
[java4, java3, java2, java1]
..............remove...............
removeFirst:java4
removeLast:java1
[java3, java2]
.............取出列表所有元素................
java3
java2