Java基础之:集合——Collection——List
List简单介绍
List接口是Collection的子接口。
List集合是有序的(输入和输出顺序不变),且允许重复元素存在。
List集合每个元素都有其对应的顺序索引,即List支持索引。
List使用及常用方法
首先是所有Collection中的方法在List中都可以使用,其次List 集合里添加了一些根据索引来操作集合元素的方法:
-
void add(int index, Object ele):在index位置插入ele元素
-
boolean addAll(int index, Collection eles):从index位置开始将eles中的所有元素添加进来
-
Object get(int index):获取指定index位置的元素
-
int indexOf(Object obj):返回obj在集合中首次出现的位置
-
int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置
-
Object remove(int index):移除指定index位置的元素,并返回此元素
-
Object set(int index, Object ele):设置指定index位置的元素为ele , 相当于是替换.
-
List subList(int fromIndex, int toIndex):返回从fromIndex到toIndex位置的子集合
package class_List; import java.util.List; import java.util.ArrayList; public class ClassTest01 { @SuppressWarnings({ "rawtypes", "unchecked" }) public static void main(String[] args) { List list = new ArrayList(); for(int i = 1; i<=10;i++) { list.add("hello" + "0" + i); } System.out.println(list); //1. void add(int index, Object ele):在index位置插入ele元素 list.add(2, "hello川农"); System.out.println(list); //2. boolean addAll(int index, Collection eles):将else从0到index位置之间的元素添加进来,返回布尔值 // list.addAll(8, list); if(list.addAll(2, list)) System.out.println(list); //3. Object get(int index):获取指定index位置的元素 System.out.println(list.get(4)); //4. int indexOf(Object obj):返回obj在集合中首次出现的位置 System.out.println(list.indexOf("hello03")); //5. int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置 System.out.println(list.lastIndexOf("hello02")); //6. Object remove(int index):移除指定index位置的元素,并返回此元素 Object obj = list.remove(2); System.out.println(obj); //7. Object set(int index, Object ele):设置指定index位置的元素为ele , 相当于是替换 System.out.println(list); Object obj2 = list.set(0,"hi川农"); //返回值:原list上指定index位置上的元素 System.out.println(obj2); System.out.println(list); //8. List subList(int fromIndex, int toIndex):返回从fromIndex到toIndex位置的子集合 List list2 = list.subList(6, 8); //java中绝大部分范围都是前闭后开的,即 [ 6,8) System.out.println(list2); } }
List练习
添加10个以上的元素(比如String “hello” ),在2号位插入一个元素"川农", 获得第5个元素,删除第6个元素,修改第7个元素,在使用迭代器遍历集合,要求:使用List的实现类ArrayList完成。
package class_List; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ClassWork01 { @SuppressWarnings({ "unchecked", "rawtypes" }) public static void main(String[] args) { List arrayList = new ArrayList(); for(int i = 1;i<10;i++) { arrayList.add("hello" + i); } //获得第5个元素,删除第6个元素,修改第7个元素 System.out.println(arrayList.get(4)); System.out.println("=============="); arrayList.remove(5); arrayList.set(6, "hello川农"); //在2号位插入一个元素"川农", arrayList.add(1, "川农"); Iterator iterator = arrayList.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); } iterator = arrayList.iterator(); } }
List的三种遍历方式
由于List支持索引,所以多了普通for循环的遍历方式。(与遍历数组一样)
这里将三种方法都列出,用于复习Collection的两种遍历方式。
package class_List; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ClassTest02_ForeachList { @SuppressWarnings({ "rawtypes", "unchecked" }) public static void main(String[] args) { List list = new ArrayList(); for(int i = 1;i<4;i++) { list.add("hello" + i); } System.out.println("=============方式一============="); //方式一:迭代器 Iterator iterator = list.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); } iterator = list.iterator(); System.out.println("=============方式二============="); //方式二:增强for循环 for(Object obj:list) { System.out.println(obj); } System.out.println("=============方式三============="); //方式三:普通for循环 for(int i = 0 ;i<list.size();i++) { System.out.println(list.get(i)); } } }
简单应用案例
使用List的实现类添加三本图书,并遍历,打印如下效果:
名称:xx 价格:xx 作者:xx
名称:xx 价格:xx 作者:xx
名称:xx 价格:xx 作者:xx
要求: 按价格排序,从低到高(使用冒泡法) 要求使用LinkedList集合实现。
只要实现了List接口,那么List的实现类都可以使用List接口中的方法。
package class_ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class ClassWork03 { @SuppressWarnings({ "unchecked", "rawtypes" }) public static void main(String[] args) { List linkedList = new LinkedList(); linkedList.add(new Book("三体1", 36.6, "刘慈欣")); linkedList.add(new Book("三体2", 32.6, "刘慈欣")); linkedList.add(new Book("三体3", 33.6, "大刘")); for (Object obj : linkedList) { System.out.println(obj); } sort(linkedList); System.out.println("====================排序后=========================="); Iterator iterator = linkedList.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); } } @SuppressWarnings({ "unchecked", "rawtypes" }) public static void sort(List linkedList) { // 按价格排序,从低到高(使用冒泡法) for (int i = 0; i < linkedList.size(); i++) { for (int j = 0; j < linkedList.size() - 1 - i; j++) { Book b1 = (Book) linkedList.get(j); Book b2 = (Book) linkedList.get(j+1); //使用List之后,不需要再像以前交换数组元素一样,使用临时变量。 //上面b1,b2都已经保存了需要交换的元素 if(b1.getPrice() > b2.getPrice()) { linkedList.set(j, b2); linkedList.set(j+1, b1); } } } } } class Book { private String name; private double price; private String author; public Book(String name, double price, String author) { super(); this.name = name; this.price = price; this.author = author; } public Book() { super(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } @Override public String toString() { return "名称:" + name + "\t价格:" + price + "\t作者:" + author; } }
程序输出
名称:三体1 价格:36.6 作者:刘慈欣
名称:三体2 价格:32.6 作者:刘慈欣
名称:三体3 价格:33.6 作者:大刘
================排序后==================
名称:三体2 价格:32.6 作者:刘慈欣
名称:三体3 价格:33.6 作者:大刘
名称:三体1 价格:36.6