List的子类

List的子类

List接口概述

特点

  • 有序:存取顺序一致。

  • 有索引

  • 元素可重复

List集合遍历方式

  • 普通for

  • 增强for

  • 迭代器

List接口的常用子类

  • ArrayList

  • LinkedList

  • Vector(了解)

List常用方法演示

  • 增删改查方法

/**
    List接口的常用方法
        * boolean add(E e) 
        * E remove(int index) 
        * boolean remove(Object o) 
        * E set(int index, E element) 
        * E get(int index)
        * int size()
 */
public class ListDemo {
    public static void main(String[] args) {
        List<Integer> list02 = new ArrayList<>();
        list02.add(1);
        list02.add(2);
        list02.add(3);
        
         //删除的是索引为1的元素//要删除值为1的元素只能用包装类
         System.out.println(list02.remove(1));
        
        
        System.out.println(list02.remove(new Integer(4)));
        
        
        // 创建集合对象
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        System.out.println(list); // ["a","b","c"]
        
        //删除索引为1的元素
        System.out.println(list.remove(1)); // b
        System.out.println(list); // ["a","c"]
        
        //删除值为d的一个元素
        System.out.println(list.remove("d")); // false
        System.out.println(list); // ["a","c"]
        
        //修改索引为1的元素为d
        list.set(1, "d");
        System.out.println(list); // [a,d]
        
        //获取索引为0的元素
        System.out.println(list.get(0)); // a
        System.out.println(list.size());
    }
}

ArrayList:

  • 底层数据结构是数组,查询快,增删慢

  • 线程不安全,效率高

Vector:

  • 底层数据结构是数组,查询快,增删慢

  • 线程安全,效率低

LinkedList:

  • 底层数据结构是链表,查询慢,增删快

  • 线程不安全,效率高

案例:

使用List的任何子类存储字符串或者存储自定义对象并遍历。

ArrayList

  • 存储字符串并遍历

         
         //存储字符串
         // 创建集合对象
        ArrayList<String> array = new ArrayList<>();

        // 创建元素对象,并添加元素
        array.add("hello");
        array.add("world");
        array.add("java");

        // 遍历
        Iterator<String> it = array.iterator();

        while (it.hasNext()) {
            String s = it.next();
            System.out.println(s);
        }

        System.out.println("-----------");

        for (int x = 0; x < array.size(); x++) {
            String s = (String) array.get(x);
            System.out.println(s);
        }

        // 存储自定义对象并遍历。
        // 创建集合对象
        ArrayList<Student> arrayStr = new ArrayList<>();

        // 创建学生对象
        Student s1 = new Student("武松", 30);
        Student s2 = new Student("鲁智深", 40);
        Student s3 = new Student("林冲", 36);
        Student s4 = new Student("杨志", 38);

        // 添加元素
        arrayStr.add(s1);
        arrayStr.add(s2);
        arrayStr.add(s3);
        arrayStr.add(s4);

        // 遍历
        Iterator<Student> itStr = arrayStr.iterator();
        while (itStr.hasNext()) {
            Student s = itStr.next();
            System.out.println(s.getName() + "---" + s.getAge());
        }

        System.out.println("----------------");

        for (int x = 0; x < arrayStr.size(); x++) {
            Student s = arrayStr.get(x);
            System.out.println(s.getName() + "---" + s.getAge());
        }
        //学生类
         class Student {
         private String name;
         private int age;
             。。。。
         }

LinkedList的特有功能:

A:添加功能

  • public void addFirst(Object e)

  • public void addLast(Object e)

B:获取功能

  • public Object getFirst()

  • public Obejct getLast()

C:删除功能

  • public Object removeFirst()

  • public Object removeLast()

LinkedList 基本使用

        // 1. 创建 LinkedList
        LinkedList<String> linkList = new LinkedList<>();
        // 2. 使用 add 方法添加元素
        linkList.add("java1");
        linkList.add("java2");
        linkList.add("java3");
        System.out.println(linkList);
        System.out.println("-----------");

        // 3. 使用 add 方法在指定索引添加元素
        linkList.add(1, "index");
        System.out.println(linkList);
        System.out.println("-----------");
        
        // 4. 使用 set 方法修改指定位置索引
        linkList.set(1, "set");
        System.out.println(linkList);
        System.out.println("-----------");

        // 5. 使用 get 方法获取指定索引的元素
        linkList.get(2);
        System.out.println("linkList.get(2):"+linkList.get(2));
        
        System.out.println("-----------");
        // 6. 使用 size 方法获取集合大小
        linkList.size();

        System.out.println("linkList.size():"+linkList.size());
        System.out.println("-----------");
        // 7. 使用 remove 方法删除指定索引的元素
        linkList.remove(2);

        System.out.println(linkList);
        System.out.println("-----------");
        // 8. 使用 remove 方法删除指定的元素
        linkList.remove("java3");

        System.out.println(linkList);
        System.out.println("-----------");
        // 9. 使用 clear 清空集合中的元素
        linkList.clear();
        System.out.println(linkList);
        System.out.println("-----------");

LinkedList 特有方法

    public static void main(String[] args) {
        // 1. 创建 LinkedList
        LinkedList<String> linkList = new LinkedList<>();

        // 2. 使用 add 方法添加元素
        linkList.add("java1");
        linkList.add("java2");
        linkList.add("java3");
        System.out.println(linkList);
        System.out.println("-----------");

        // 3. 使用 addFirst 添加元素到集合最前面
        linkList.addFirst("addFirst");

        // 4. 使用 addLast 添加元素到集合最后面
        linkList.addLast("addLast");

        System.out.println(linkList);
        System.out.println("-----------");

        // 5. 使用 getFirst 获取集合第一个元素
        System.out.println("getFirst:" + linkList.getFirst());
        // 6. 使用 getLast 获取集合最后一个元素
        System.out.println("getLast:" + linkList.getLast());
        System.out.println("-----------");
        
        // 7. 使用 removeFirst 删除集合第一个元素
        System.out.println("removeFirst:" + linkList.removeFirst());

        // 8. 使用 removeLast 删除集合最后一个元素
        System.out.println("removeLast:" + linkList.removeLast());

        System.out.println(linkList);
        System.out.println("-----------");
    }

LinkedList与栈操作相关的方法

  • push(E e);将元素添加栈中

  • E pop();获得栈顶元素,并将该元素从栈中移除。

  • E peek(); 获得栈顶元素,并不将该元素从栈中移除。

LinkedList与队列操作相关的方法

  • offer(E e) 将元素添加到队列中

  • E poll(); 获取队列中的第一个元素,并将该元素从队列中移除。

  • E peek(); 获得队列中的第一个元素,并不将该元素从队列中移除。


    /**
     * LinkedList与栈操作相关的方法
     */
    public static void test01() {
        // 创建集合对象
        LinkedList<String> list = new LinkedList<>();
        // 压栈/入栈
        list.push("aaa");
        list.push("bbb");
        list.push("ccc");
        
        // 弹栈/出栈
        String e = list.pop();
        System.out.println(e); // ccc
        
        // 查询栈顶元素
        String ee = list.peek();
        System.out.println(ee);
        System.out.println(list); 
    }

      /**
     * LinkedList与队列操作相关的方法
     */
public class LinkedListDemo02 {
    public static void main(String[] args) {
        // 创建集合对象
        LinkedList<String> list = new LinkedList<>();
        
        // 添加元素 
        list.offer("aaa");
        list.offer("bbb");
        list.offer("ccc");
        // 获得队列头的元素
        String e = list.poll();
        System.out.println(e);
        System.out.println(list.peek()); // bbb
        System.out.println(list); // [bbb,ccc]
    }
}

如何选择ArrayList和LinkedList

  • 如果只是查询数据,则选择ArrayList。

  • 如果需要进行大量的增删操作,则选择LinkedList。

Vector(已经被ArrayList取代):(了解即可)

1:添加功能

  • public void addElement(Object obj) -- add()

2:获取功能

  • public Object elementAt(int index) -- get()

  • public Enumeration elements() -- Iterator iterator()

  • boolean hasMoreElements() hasNext()

  • Object nextElement() next()

JDK升级的原因:

  • A:安全

  • B:效率

  • C:简化书写

         // 创建集合对象
        Vector<String> v = new Vector<>();

        // 添加功能
        v.addElement("hello");
        v.addElement("world");
        v.addElement("java");

        // 遍历
        for (int x = 0; x < v.size(); x++) {
            String s = v.elementAt(x);
            System.out.println(s);
        }
        System.out.println("------------------");
        
        // 遍历
        for (String s : v) {
            System.out.println(s);
        }

        System.out.println("------------------");

        Enumeration<String> en = v.elements(); // 返回的是实现类的对象
        while (en.hasMoreElements()) {
            String s = en.nextElement();
            System.out.println(s);

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值