01_List集合
定义:元素有序,并且每一个元素都存在一个索引.元素可以重复.
List集合的特有功能概述
void add(int index,E element): 在指定索引处添加元素
E remove(int index):移除指定索引处的元素 返回的是移除的元素
E get(int index):获取指定索引处的元素
E set(int index,E element):更改指定索引处的元素 返回的而是被替换的元素
int indexOf(Object o)
返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。
int lastIndexOf(Object o)
返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。
案例演示
package ListDemo01;
import java.util.ArrayList;
import java.util.List;
public class ListTest01 {
public static void main(String[] args) {
//创建一个List集合
List list = new ArrayList();
//往集合中加入元素
list.add(100);
list.add(100);
list.add(200);
list.add(200);
list.add(300);
list.add(400);
//指定索引位置添加元素
list.add(2,666);//[100, 100, 666, 200, 200, 300, 400]
System.out.println(list);
}
}
01.1_通过索引来获取集合中的元素
package ListDemo01;
import java.util.ArrayList;
import java.util.List;
//get(list.size() - 1); 通过索引来获取集合中的元素
public class ListTest02 {
public static void main(String[] args) {
//创建一个List集合
List list = new ArrayList();
//往集合中加入元素
list.add(100);
list.add(100);
list.add(200);
list.add(200);
list.add(300);
list.add(400);
System.out.println(list.get(3));//200
System.out.println(list.get(list.size() - 1));//400
}
}
01.3_根据元素来删除remove
package ListDemo01;
import java.util.ArrayList;
import java.util.List;
//根据元素来删除remove
public class ListTest03 {
public static void main(String[] args) {
//创建一个List集合
List list = new ArrayList();
//往集合中加入元素
list.add(100);
list.add(100);
list.add(200);
list.add(200);
list.add(300);
list.add(400);
//list.remove(200);这时候索引和元素区分不出来,我们可以使用手动装箱
list.remove(Integer.valueOf(200));//[100, 100, 200, 300, 400]
//一次只删一个元素
System.out.println(list);
//根据索引删除元素
list.remove(3);
System.out.println(list);//[100, 100, 200, 400]
}
}
01.4_List集合遍历
package ListDemo01;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListTest01 {
public static void main(String[] args) {
//创建一个List集合
List list = new ArrayList();
//往集合中加入元素
list.add(100);
list.add(100);
list.add(200);
list.add(200);
list.add(300);
list.add(400);
//指定索引位置添加元素
list.add(2,666);//[100, 100, 666, 200, 200, 300, 400]
System.out.println(list);
//得到某个元素
System.out.println(list.get(2));//666
//遍历数组
for (int i = 0; i < list.size(); i++) {
Object o = list.get(i);
System.out.println(o);
}
//List也有属于自己的迭代器
Iterator listIterator = list.listIterator();
while (listIterator.hasNext()){
Object o = listIterator.next();
System.out.print(o);
}
}
}
01.5_ListIterator遍历
package ListDemo01;
import CollectionDemo01.Student;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
//List集合的遍历
//方式1循环遍历
//方式2迭代器遍历
public class ListLength01 {
public static void main(String[] args) {
Student s1 = new Student("詹姆斯",35);
Student s2 = new Student("霍华德",30);
Student s3= new Student("韦德",34);
Student s4 = new Student("安东尼",32);
List list=new ArrayList();
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
//使用集合遍历,就是将集合中的到的每个元素,强行转换为Student类,然后得到他的变量
for (int i = 0; i < list.size(); i++) {
Object o = list.get(i);
Student student= (Student) o;
System.out.print(student.getName()+" "+student.getAge()+"\t");//詹姆斯 35 霍华德 30 韦德 34 安东尼 32
}
//方法二、迭代器,就是将迭代出来的元素向下转型为Student
Iterator listiterator=list.listIterator();
while (listiterator.hasNext()){
Student student = (Student) listiterator.next();
System.out.print(student.getName()+" "+student.getAge()+"\t");
}
}
}
01.7_ListIterator的特有功能
反向遍历
ListIterator 继承自Iterator 可以使用Iterator中的方法
ListIterator的特有功能
boolean hasPrevious(): 是否存在前一个元素
E previous(): 返回列表中的前一个元素
以上两个方法可以实现反向遍历 但是注意 要完成反向遍历之前 要先进行正向遍历 这样指针才能移到最后
如果直接反向遍历是没有效果的 因为指针默认位置就在最前面 他前面没有元素
案例演示:ListIterator
package ListDemo01;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
//:ListIterator的特有功能也就死反向迭代
//在进行反向之前一定要进行正向迭代,就像压子弹,只有压下去了,固定卡榫才可以反向的向上运动
//如果没有压子弹,卡栓就在顶头,反向是空的,没有意义
public class ListIteratorTest01 {
public static void main(String[] args) {
//创建一个List集合
List list = new ArrayList();
//往集合中加入元素
list.add(100);
list.add(100);
list.add(200);
list.add(200);
list.add(300);
list.add(400);
//正向迭代
ListIterator listIterator = list.listIterator();
while(listIterator.hasNext()){
Object obj = listIterator.next();
System.out.print(obj+"\t");
}
System.out.println();//100 100 200 200 300 400
//反向迭代
/* boolean hasPrevious(): 是否存在前一个元素
E previous(): 返回列表中的前一个元素*/
while (listIterator.hasPrevious()){
Object previous = listIterator.previous();
System.out.print(previous+"\t");//400 300 200 200 100 100
}
}
}
01.8_案例演示:迭代器并不是都能遍历
package BigDemo01;
import com.sun.glass.ui.Size;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
public class MyTest03 {
/* A:
案例演示
需求:我有一个集合,请问,我想判断里面有没有 "world" 这个元素,
如果有,我就添加一个 "javaee" 元素,请写代码实现。*/
public static void main(String[] args) {
List list=new ArrayList();
list.add("world");
list.add("aaa");
list.add("bbb");
//迭代器遍历
Iterator iterator = list.iterator();
System.out.println("-------------------------")
/*while(iterator.hasNext()){
String next = (String) iterator.next();
if("world".equals(next)){
list.add("javaee");
}
}*/
//System.out.println(list);
for (int i = 0; i < list.size(); i++) {
String next = (String) list.get(i);
if("world".equals(next)){
list.add("javaee");
}
}
System.out.println(list);
}
}
我们用Iterator这个迭代器遍历采用hasNext方法和next方法,集合修改集合 会出现并发修改异常
原因是我们的迭代依赖与集合 当我们往集合中添加好了元素之后 获取迭代器 那么迭代器已经知道了集合的元素个数。
这个时候你在遍历的时候又突然想给 集合里面加一个元素(用的是集合的add方法) 那迭代器不同意 就报错了。
案例演示:循环遍历,比较相同,相同就删除,只留本身
package BigDemo01;
import java.util.ArrayList;
public class Mytest04 {
public static void main(String[] args) {
//作业:去除集合中的重复元素,要求,不能创建新的集合。只在原有集合中操作。
ArrayList list =new ArrayList();
list.add(20);list.add(20);list.add(120);list.add(20);list.add(202);list.add(20);
list.add(20);list.add(20);list.add(30);list.add(30);list.add(20);list.add(20);
list.add(660);list.add(40);list.add(20);list.add(50);list.add(50);
System.out.println(list.size());//17//20 120 202 30 660 40 50
for (int i = 0; i < list.size() - 1; i++) {
for (int j = list.size()-1; j > i; j--) {
if(list.get(i).equals(list.get(j))){
list.remove(j);
}
}
}
System.out.println(list);
}
}