接口 List<E>
有序的 collection(也称为序列)。
成员方法基本和Collection差不多:
测试代码;
package collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* list 集合
* @author Angus
* Collection
* |--list
* 元素有序(指的存储顺序和取出顺序一致),可重复
* |--set
* 元素无序 ,唯一
*/
public class ListDemo {
public static void main(String[] args) {
List list = new ArrayList();
//添加
list.add("hello");
list.add("world");
list.add("java");
//便利
Iterator it = list.iterator();
while(it.hasNext()){
String s = (String) it.next();
System.out.println(s);
}
}
}
list特有方法:
package collection;
import java.util.ArrayList;
import java.util.List;
/**
* List 特有功能
* @author Angus
* 添加
* add(int index, E element) : 在列表的指定位置插入指定元素(可选操作)。
* 删除
* remove(int index) 移除列表中指定位置的元素(可选操作)。
* 修改
* set(int index, E element) 用指定元素替换列表中指定位置的元素(可选操作)。
* 获取
* get(int index) 返回列表中指定位置的元素。
* indexOf(Object o) 返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1
* listIterator() 返回此列表元素的列表迭代器(按适当顺序)。
* listIterator(int index) 返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。
* 截取
* subList(int fromIndex, int toIndex) 返回列表中指定的 fromIndex(包括 )和 toIndex(不包
*/
public class ListDemo2 {
public static void main(String[] args) {
List list = new ArrayList();
list.add("hello");
list.add("world");
list.add("java");
//add(int index, E element) : 在列表的指定位置插入指定元素(可选操作)。
// list.add(1, "javaEE");
// System.out.println(list);//[hello, javaEE, world, java]
//remove(int index) 移除列表中指定位置的元素(可选操作)。
// list.remove(1);
// System.out.println(list); //[hello, java]
//set(int index, E element) 用指定元素替换列表中指定位置的元素(可选操作)。
// list.set(1, "JVAAEE");
// System.out.println(list);//[hello, JVAAEE, java]
//get(int index) 返回列表中指定位置的元素。
// System.out.println(list.get(1));//world
//通过上面的测试,我们发现,索引在编
//那么如果我们有办法知道索引的范围,就可以遍历集合
//我们知道 0--(size()-1)
//结合size和get遍历集合
for (int i = 0; i < list.size(); i++) {
String s = (String) list.get(i);
System.out.println(s);
}
}
}
listIterator
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/**
*
* @author Angus
* listIterator() 返回此列表元素的列表迭代器(按适当顺序)。
*/
public class ListDemo3 {
public static void main(String[] args) {
List list = new ArrayList();
list.add("hello");
list.add("world");
list.add("java");
//遍历
ListIterator listIterator = list.listIterator();//查看API发现它继承Iterator
while(listIterator.hasNext()){
String s = (String) listIterator.next();
System.out.println(s);
}
System.out.println("----------------------------");
//遍历
// Iterator it = list.iterator();
// while(it.hasNext()){
// String s = (String) it.next();
// System.out.println(s);
// }
//需求,遍历集合判断是否有hello元素,如果有再添加一个元素javaEE
//方式一;
Iterator it = list.iterator();
while(it.hasNext()){
String s = (String) it.next();
if("hello".equals(s)){
list.add("javaEE");
// it= list.iterator();// 原理可以解决,但是这样也是不行,内存溢出。。
}
}
System.out.println(list); //Exception in thread "main" java.util.ConcurrentModificationException
//报错了 并发修改异常
//当我们通过迭代器迭代元素的过程中,又通过集合修改了,这样是不允许的
//而目前,迭代器没有变,集合变了,所以,并发异常。
//解决:
//1:通过迭代器操作的时候,可以通过迭代器对集合进行操作
//2:通过集合普通for遍历的时候,可以通过集合去操作
}
}
解决代码
//1:通过迭代器操作的时候,可以通过迭代器对集合进行操作 只能是ListIterator
//2:通过集合普通for遍历的时候,可以通过集合去操作
for (int i = 0; i < list.size(); i++) {
String string = (String) list.get(i);
if("hello".equals(string)){
list.add("javaEE");
}
}
System.out.println(list); //[hello, world, java, javaEE]
System.out.println("----------------------------");
//通过迭代器实现
ListIterator is = list.listIterator();
while(is.hasNext()){
String string2 = (String) is.next();
if("hello".equals(string2)){
is.add("javaEE2");
}
}
System.out.println(list);//[hello, javaEE2, world, java
逆向遍历测试
package collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/**
*
* @author Angus
* listIterator() 返回此列表元素的列表迭代器(按适当顺序)。
* 特有功能:
* previous() 返回列表中的前一个元素。
* hasPrevious() 如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。
*
* 逆向遍历测试
*/
public class ListDemo3 {
public static void main(String[] args) {
List list = new ArrayList();
list.add("hello");
list.add("world");
list.add("java");
//遍历
ListIterator listIterator = list.listIterator();//查看API发现它继承Iterator
while(listIterator.hasNext()){
String s = (String) listIterator.next();
System.out.println(s);
}
System.out.println("----------------------------");
/**
* 逆向遍历 前提必须有上面的正向遍历
*/
// System.out.println(listIterator.previous()); //java
// System.out.println(listIterator.previous());//world
// System.out.println(listIterator.previous());//hello
while(listIterator.hasPrevious()){
String s = (String) listIterator.previous();
System.out.println(s);
}
}
}
最后附上JDK使用文档API 下载