目录
List接口
List接口概述
List接口成员方法
1.添加方法
2.删除功能
3.获取功能
4.修改功能
List集合特有的迭代器
ListIterator接口的成员方法
List集合特有遍历方式
List接口
List接口概述
有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。 与 set 不同,列表通常允许重复的元素。
List接口成员方法
1.添加方法
void add(int index,E element) 将指定的元素插入此列表中的指定位置(可选操作)
import java.util.ArrayList;
import java.util.List;
public class CollectionTest6 {
public static void main(String[] args) {
//创建List集合对象
List list =new ArrayList();
//向集合添加元素
list.add("java");
list.add("hadoop");
list.add("bigdata");
System.out.println(list);
//void add(int index,E element) 将指定的元素插入此列表中的指定位置(可选操作)
list.add(1,"hive"); //在索引为1的位置上(hadoop)插入hive
System.out.println(list);
}
}
插入元素索引超过集合长度会报错(范围:index>=0&&index <=list.size() )
2.删除功能
E remove(int index) 删除该列表中指定位置的元素 (可选操作)
System.out.println(list); //原集合
//E remove(int index) 删除该列表中指定位置的元素 (可选操作)
System.out.println(list.remove(3)); //删除索引为3的元素,有返回值,可输出,返回被删除的元素
System.out.println(list);
3.获取功能
E get(int index) 返回此列表中指定位置的元素
System.out.println(list);//原集合
//E get(int index) 返回此列表中指定位置的元素
System.out.println(list.get(2)); //返回索引为2的元素,原集合不变
System.out.println(list);
4.修改功能
E set(int index,E element) 用指定的元素(可选操作)替换此列表中指定位置的元素
System.out.println(list);//原集合
//E set(int index,E element) 用指定的元素(可选操作)替换此列表中指定位置的元素
Object o = list.set(1, "hello");
System.out.println(o); //返回的是被替换的那个元素
System.out.println(list);
List集合特有的迭代器
ListIterator listIterator() 返回列表中的列表迭代器(按适当的顺序)
ListIterator继承Iterator接口,所以内部有hasNext()和next()方法 【Collection,Iterator接口 】
例:用List特有迭代器遍历字符串
public class ListTest1 {
public static void main(String[] args) {
//创建List集合对象
List list =new ArrayList();
//向集合添加元素
list.add("java");
list.add("hive");
list.add("bigdata");
list.add("hadoop");
list.add("python");
//获取迭代器对象 ListIterator listIterator() 返回列表中的列表迭代器(按适当的顺序)
ListIterator listIterator = list.listIterator();
//遍历
while(listIterator.hasNext()){
//向下转型,获取元素的方法(元素的长度)
String s =(String) listIterator.next();
System.out.println(s+" 长度:"+s.length());
}
}
}
ListIterator接口的成员方法
E previous() 返回列表中的上一个元素,并向后移动光标位置。可以反复调用此方法以向后遍历列表,或者与调用next()进行混合来回。(若最先使用会报错,因为前面无元素)
boolean hasPrevious() 遍历反向列表,列表迭代器有多个元素 返回true,否则false (与hasnext()相对)
例:修改List迭代器反向遍历
while(listIterator.hasNext()){
//向下转型,获取元素的方法(元素的长度)
String s =(String) listIterator.next();
System.out.println(s+" 长度:"+s.length());
}
System.out.println("=======分界线==========");
while(listIterator.hasPrevious()){
String s= (String) listIterator.previous();
System.out.println(s+" 长度:"+s.length());
}
所以要想用此方法反着遍历需先正着遍历,将指针移动到末尾。
List集合特有遍历方式
因为List集合中有 E get(int index) 的获取方法,所以我们可以利用size()和get()方法结合来遍历。
例:List集合特有遍历方式
import java.util.ArrayList;
import java.util.List;
public class ListTest2 {
public static void main(String[] args) {
//创建List集合对象
List list=new ArrayList ();
//添加元素
list.add("java");
list.add("sad23");
list.add("wre32323");
list.add("rr333");
//利用size()和get()方法遍历
for (int i=0;i<list.size();i++){
//获取list集合中每一个元素
Object o = list.get(i);
//向下转型,获取元素的方法(字符串的长度)
String s=(String) o;
System.out.println(s+" 长度"+s.length());
}
}
}
案例:存在一个集合,其中存放String类型数据,如果该集合元素里有“hive”,添加一个“true”。
方法一:迭代器遍历
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ListTest3 {
public static void main(String[] args) {
//创建List集合对象
List list = new ArrayList ();
//添加元素
list.add("wa2323");
list.add("ds3434");
list.add("hive");
list.add("g444");
list.add("sd3s3");
//方法a:用list特有迭代器ListIterator遍历
//获取迭代器对象
ListIterator listIterator = list.listIterator();
while (listIterator.hasNext()){
Object next = listIterator.next();
//向下转型获取元素
String s=(String) next;
//判断是否有“hive”
if("hive".equals(s)){
listIterator.add("true"); //如果有,此时指针正好指向hive,所以将会在hive后添加true
}
}
System.out.println(list);
方法二:List集合特有方法遍历
//方法b:利用List集合特有的遍历方式(size()和get()方法结合)
for (int i=0;i<list.size();i++){
Object o = list.get(i);
//向下转型
String s=(String) o;
if ("hive".equals(s)){
list.add("true"); //这里没有用到迭代器,无指针,所以将会在集合末尾添加true
}
System.out.println(s+" 长度:"+s.length());
}