List
接口基本介绍
1、List集合类中的元素是有序的 ,即添加顺序和取出顺序一致,先进先出。List中的元素可重复
2、List集合中的每个元素都有其对应的顺序索引,即支持索引
3、List容器中的元素都对应一个整数型的序号,记载其在容器中的位置,可以根据序号存取容器中的元素。
4、List接口比较常用的实现类有:ArrayList、 LinkedList 和 Vector
List常用方法
List集合中添加了一些根据索引来操作集合元素的方法
Java
package com.zhang.test_package.list_;
import java.util.ArrayList;
import java.util.List;
public class List_ {
public static void main(String[] args) {
ArrayList list = new ArrayList();
// 1、集合是有序的,而且元素可重复
// add方法:插入 add(int index, Object ele); 指定插入的位置
list.add("tom");
list.add("jack");
list.add("mary");
list.add("tom");
list.add(2, "zhang");
System.out.println(list);
// addAll:在index位置开始,添加多个元素
// addAll(int index, Collection c);
ArrayList list1 = new ArrayList();
list1.add("张三");
list1.add("李四");
list.addAll(2, list1);
System.out.println(list);
// List中的每个元素都有对应的顺序索引
// get 方法,根据下标添加
System.out.println(list.get(2)); // 张三
// indexOf(Object o): 参数为Object,返回对应参数的index
System.out.println(list.indexOf("zhang")); // 4
// lastIndexOf(Object o):返回参数最后一次在集合中出现的index
System.out.println(list.lastIndexOf("tom")); // 6
// remove(int index): 删除指定index的元素,下标超出或者不合理会报错。
System.out.println(list.remove(0));
// set(int index, Object element); 设置指定位置的元素,相当于替换
// 注意下标
System.out.println(list);
list.set(0, "三丰");
System.out.println(list);
//subList(int fromIndex, int toIndex)
// 返回从fromIndex到toIndex间的元素,注意左闭右开
List list2 = list.subList(0, 2);
System.out.println(list2);
}
}
练习题
Java
package com.zhang.test_package.list_;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class ListExercise {
public static <T> void sortList(List list, Comparator c) {
int size = list.size();
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i -1; j++) {
T left = (T) list.get(j);
T right = (T) list.get(j + 1);
if (c.compare(left, right) > 0) {
list.set(j, right);
list.set(j + 1, left);
}
}
}
}
public static void main(String[] args) {
ArrayList<Book> books = new ArrayList<>();
books.add(new Book("三国演义", "罗贯中", 10.1));
books.add(new Book("红楼梦", "曹雪芹", 13.1));
books.add(new Book("小李飞刀", "古龙", 10.43));
sortList(books, new Comparator<Book>() {
@Override
public int compare(Book o1, Book o2) {
double price = o1.getPrice() - o2.getPrice();
if (price>0) {
return 1;
} else if (price==0){
return 0;
} else {
return -1;
}
}
});
for(Book book :books)
{
System.out.println(book);
}
}
}
class Book {
private String name;
private double price;
private String author;
public Book(String name, String author, double price) {
this.name = name;
this.price = price;
this.author = author;
}
@Override
public String toString() {
return "名称: " + name + "\t" +
"价格: " + price + "\t" +
"作者: '" + author + "'";
}
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;
}
}