package list_gaowei_01;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/*
* List
* 有序的Collection,允许重复的元素
* 有序:存储和取出的元素一致
*
* 可以根据索引来访问列表
* 与set不同的是列表通常允许重复的元素
*
*/
public class listDemo {
public static void main(String[] args) {
//创建集合对象
List list = new ArrayList();
list.add("C++"); //永远返回true,底层是个数组
list.add("java");
list.add("python");
list.add("java");
list.add("python");
Iterator it = list.iterator();
while(it.hasNext()) {
System.out.println((String)it.next());
}
}
}
package list_gaowei_01;
import java.util.List;
import java.util.ArrayList;
/*
* List集合的特有功能:
*
* A: 添加元素
* void add(int index,Object obj)
* 在指定位置添加元素
* B: 获取元素
* void get(int index,Object obj)
* 在指定位置添加元素
* C: 列表特有的迭代器
* ListIterator()
* ListIterator(int index) : 从指定索引开始迭代
*
* D: 删除功能:
* Object remove(int index):根据索引删除元素,并返回元素
*
* E: 修改功能:
* Object set(int index,Object element) :修改索引处元素,并返回被修改元素
*
*/
public class listDemo2 {
public static void main(String[] args) {
List list = new ArrayList();
list.add("hello");
list.add("world");
list.add("my name is gaowei");
list.add(3,"haha");
//list.add(11,"haha"); //IndexOutOfBoundsException
System.out.println(list.get(2));
// System.out.println(list.remove(2));
System.out.println(list.set(2,"haha"));
System.out.println(list);
}
}
package list_gaowei_01;
/*
*
* list集合的特有遍历功能
* for循环和list.size()方法结合
*
* 迭代器
* ListIterator ListIterator():list集合的特有的迭代器
* 继承了 Iterator迭代器,因此有 hasNext()和next()
*
* 特有功能:
* hasPrevoius() 和 prevoius() 逆向遍历
* 不过,必须得事先进行正向遍历,才能进行逆向遍历!
*
*/
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class listDemo3 {
public static void main(String[] args) {
List list = new ArrayList();
list.add("hello");
list.add("world");
list.add("my name is gaowei");
// System.out.println(list.get(0));
// System.out.println(list.get(1));
// System.out.println(list.get(2));
//
// for(int i=0;i<list.size();i++) {
// System.out.println((String)list.get(i));
// }
//正向遍历
Iterator it = list.iterator();
while (it.hasNext()) {
System.out.println((String) it.next());
}
System.out.println("-----------------");
ListIterator listIt = list.listIterator();
while (listIt.hasNext()) {
System.out.println((String) listIt.next());
}
//反向遍历
System.out.println("-----------------");
while (listIt.hasPrevious()) {
System.out.println((String) listIt.previous());
}
}
}
package list_gaowei_01;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/*
* 问题:
* 我有一个集合,我想判断是否包含“world”这个元素,如果有,我添加一个“javaee”
*
* 报错:
* ConcurrentModificationException
*
* 原因:
* 迭代器是依赖集合而存在的,在判断成功后,集合添加了元素,而迭代器却不知道,索引就报错了
* 这个错叫并发修改异常
*
* 因此,迭代器在遍历元素的时候,通过集合是不能修改元素的。
*
* 如何解决呢?
* A: 迭代器迭代元素,迭代器修改元素, 而Iterator没有添加功能,
* 因此用 ListIterator迭代器.
* 不过,元素是在刚才迭代的元素之后添加的。
* B: 集合遍历元素,集合修改元素(普通for)
* 元素在最后添加的。
*
*/
public class listDemo4 {
public static void main(String[] args) {
List list = new ArrayList();
list.add("wo");
list.add("ai");
list.add("our");
list.add("world");
// Iterator it = list.iterator();
// while(it.hasNext()) {
// System.out.println((String)it.next());
// if(it.next().equals("world")){
// list.add("javaee");
// }
// }
// //使用ListIterator迭代器
// ListIterator listit = list.listIterator();
// while(listit.hasNext()) {
// String s = (String)listit.next();
// if(s.equals("ai")){
// listit.add("javaee");
// }
//
// }
//使用列表添加元素
for(int i=0;i<list.size();i++) {
String s = (String)list.get(i);
if(s.equals("ai")) {
list.add("javaee");
}
}
System.out.println(list);
}
}