继承自Collection接口
1、List集合中的元素是有序的;
2、List集合中的元素可以重复;
3、List集合包含了索引概念;
package day17; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class List1 { public static void main(String[] args) { List list=new ArrayList(); list.add("hello"); list.add("world"); list.add("bigdata"); list.add("java"); Iterator iterator = list.iterator(); while (iterator.hasNext()){ String s=(String) iterator.next(); System.out.println(s+"---"+s.length()); // hello---5 // world---5 // bigdata---7 // java---4 } } }
List相关集合特有的功能:
因为List集合下标含有索引的概念,所以根据这个索引衍生出特有的方法。
1、添加功能:void add(int index,Object element)将指定的元素插入此列表指定的位置
2、删除功能:Object remove(int index)删除该列表中指定的元素
3、获取功能:Object get(int index)返回此列表中指定的位置
4、修改功能:Object set(int index,Object element)用指定的元素替换该列表中指定位置的元素
5、List集合特有的迭代器:ListIterator listiterator()返回列表中的迭代器
import java.util.ArrayList; import java.util.List; public class ListDemo2 { public static void main(String[] args) { //创建List集合对象 List list = new ArrayList(); //添加元素到集合中 list.add("hello"); list.add("world"); list.add("java"); list.add("bigdata"); list.add("hadoop"); System.out.println(list); // System.out.println("======================================"); // //void add(int index, Object element) 将指定的元素插入此列表中的指定位置(可选操作)。 // //超出的范围:index < 0 || index > size() ===> 0<=index<=size() ===> [0,size()] // list.add(0,"hive"); // System.out.println(list); // list.add(5,"spark"); // System.out.println(list); // list.add(7,"flink"); // System.out.println(list); // list.add(10,"Hbase"); //IndexOutOfBoundsException // System.out.println(list); // System.out.println("======================================"); //Object remove(int index) 删除该列表中指定位置的元素(可选操作)。 // System.out.println(list.remove(3)); // System.out.println(list); // System.out.println("======================================"); // //Object get(int index) 返回此列表中指定位置的元素。 // System.out.println(list.get(4)); // System.out.println(list); System.out.println("======================================"); //Object set(int index, Object element) 用指定的元素(可选操作)替换此列表中指定位置的元素。 //返回的是指定位置被替换的元素 Object obj = list.set(2, "hive"); System.out.println(obj); System.out.println("list:" + list); } }
ListIterator listiterator()返回列表中的迭代器,public interface ListIterator extends Iterator,由于ListIterator继承自Iterator接口,所以内部一定有hasNext()和next()方法;
Objiect previous返回列表中的上一个元素,并向后移动光标的位置。可以反复调用此方法以向后遍历列表,或者用next()进行混合来回。
1、该方法是获取集合中前一个元素。
2、该方法获取指针与next()指针是同一个。
注意:要想倒着遍历,就必须先正着遍历,先将指针移动到末尾。在开发中不常用,但是在面试中可能会问到。 boolean hasPrevious() 返回 true如果遍历反向列表,列表迭代器有多个元素。 判断上一个位置是否铀元素,如果有元素返回true,如果没有元素,返回false。
import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class ListDemo3 { public static void main(String[] args) { //1、创建List集合对象 List list = new ArrayList(); //2、添加元素到集合中 list.add("hello"); list.add("world"); list.add("java"); list.add("bigdata"); ListIterator listIterator = list.listIterator(); while (listIterator.hasNext()) { String s = (String) listIterator.next(); System.out.println(s + ",字符串的长度为:" + s.length()); } // Object previous = listIterator.previous(); // System.out.println(previous); //NoSuchElementException while (listIterator.hasPrevious()){ Object previous = listIterator.previous(); System.out.println(previous); } } }
List集合遍历方式:
1、调用toArray()方法,转为数组遍历
2、迭代器遍历
3、size()与get()方法结合遍历
import java.util.ArrayList; import java.util.List; public class ListDemo4 { public static void main(String[] args) { //1、创建List集合对象 List list = new ArrayList(); //2、向集合中添加元素 list.add("hello"); list.add("world"); list.add("java"); list.add("bigdata"); list.add("hadoop"); //size()与get()方法结合使用遍历集合 for (int i = 0; i < list.size(); i++) { Object o = list.get(i); //向下转型 String s = (String) o; System.out.println(s + ",字符串的长度为:" + s.length()); } } }
添加学生对象:
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class List5 { public static void main(String[] args) { //1、创建List集合对象 List list = new ArrayList(); //2、创建学生对象 Student s1 = new Student("小白", 18); Student s2 = new Student("小黑", 19); Student s3 = new Student("小辉", 20); Student s4 = new Student("大黄", 17); //3、将学生对象添加到集合中 list.add(s1); list.add(s2); list.add(s3); list.add(s4); //遍历 //a:转成数组遍历 Object[] objects = list.toArray(); for (int i = 0; i < objects.length; i++) { Student s = (Student) objects[i]; System.out.println(s.getName() + "---" + s.getAge()); } System.out.println("======================================="); //b:迭代器遍历 Iterator iterator = list.iterator(); while (iterator.hasNext()) { Student s = (Student) iterator.next(); System.out.println(s.getName() + "---" + s.getAge()); } System.out.println("======================================="); //c:get()和size()方法结合遍历(这是List集合特有的遍历方式,因为有索引的概念) for (int i = 0; i < list.size(); i++) { Student s = (Student) list.get(i); System.out.println(s.getName() + "---" + s.getAge()); } } }
需求:有一个集合,集合中存储着一些字符串类型的元素,我想判断里面有没有"bigdata"这个字符串,如果有就添加一个"yes"。
由于迭代器是依赖于集合而存在的,在遍历迭代器中的元素的时候,我们判断成功后往集合中天加一个元素,但是迭代器此时并不知道添加了元素所以会报错。所以在迭代器报错时不能通过集合修改元素。
解决办法:
1、迭代器遍历,迭代器修改。
2、集合遍历,集合修改。
import java.util.ArrayList; import java.util.List; public class List6 { public static void main(String[] args) { List list=new ArrayList<>(); list.add("hello"); list.add("world"); list.add("java"); list.add("bigdata"); list.add("hive"); for (int i=0;i< list.size();i++){ String s=(String) list.get(i); if ("bigdata".equals(s)){ list.add("yes"); } System.out.println(s); } } }