List接口
List接口
特点:有序、有下标、可重复
方法
除了继承Collection接口的方法,List还有自己的方法
List的方法相比Collection添加了下标相关的方法,添加、删除、获取下标、获取数据、列表迭代器等
void add(int index, Object o) //在index位置插入对象
boolean addAll(int index, Collection c) //将一个集合中的元素添加到此集合中的index位置
Object get(int index) // 返回集合中指定的位置的元素
List subList(int fromIndex, int toIndex) // 返回fromIndex到toIndex之间的元素集合
int indexOf(Object o) // 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1
ListIterator<E> listIterator() // 返回列表中的列表迭代器(按适当的顺序) 
ListIterator<E> listIterator(int index) // 从列表中的指定位置开始,返回列表中的元素(按正确顺序)的列表迭代器
E remove(int index) // 删除该列表中指定位置的元素(可选操作)。  
实践
Demo1
package com.qianfeng;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/**
 * List添加、删除、遍历、判断和获取
 *
 * @since 2022-05-06
 */
public class ListDemo {
    public static void main(String[] args) {
        List li = new ArrayList<>();
        // 添加元素
        li.add("苹果");
        li.add("三星");
        li.add("小米");
        li.add("华为");
        // 删除元素
//        li.remove("三星");
        li.remove(0);
        // 遍历
        // 由于List继承于Collection,所以可以使用增强for循环遍历
        System.out.println("===============使用增强for循环遍历==================");
        for (Object o : li) {
            System.out.println(o.toString());
        }
        // 由于List有下标,所以可以使用for循环遍历
        System.out.println("===============使用for循环遍历==================");
        for (int i = 0; i < li.size(); i++) {
            System.out.println(li.get(i));
        }
        // 由于List继承于Collection,所以可以使用迭代器遍历
        System.out.println("===============使用迭代器遍历==================");
        Iterator it = li.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
        // List有列表迭代器,可以实现双向遍历、添加、删除、更新等操作
        System.out.println("===============使用列表迭代器遍历==================");
        ListIterator lit = li.listIterator();
        while (lit.hasNext()) {
            System.out.println(lit.nextIndex() + ":" + lit.next());
        }
        while (lit.hasPrevious()) {
            System.out.println(lit.previousIndex() + ":" + lit.previous());
        }
        // 判断
        System.out.println(li.contains("索尼"));
        System.out.println(li.isEmpty());
        // 获取
        System.out.println(li.indexOf("华为"));
    }
}
Demo2 数值列表
package com.qianfeng;
import java.util.ArrayList;
import java.util.List;
/**
 * 数值List添加删除
 *
 * @since 2022-05-06
 */
public class ListDemo2 {
    public static void main(String[] args) {
        List list = new ArrayList<>();
        // 添加元素
        list.add(10);
        list.add(180);
        list.add(20);
        list.add(30);
        System.out.println(list);
        // 删除元素
//        list.remove(0);
        // 这里直接删除180会报错,可采用如下两种方式,可以采用new的原因是remove中有一个equals的比较,Integer的equals方法就是比较值
        list.remove(new Integer(180));
//        list.remove(list.indexOf(180));
        System.out.println(list);
        // 取子列表,左闭右开
        System.out.println(list.subList(1, 3));
    }
}
List实现类
ArrayList
底层是数组,查询快,增删慢
JDK1.2版本出现,运行效率高,线程不安全
Vector
底层是数组,查询快,增删慢
JDK1.0出现,运行效率低,线程安全
LinkedList
底层是链表,增删快,查询慢
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号