集合(6):List接口的子类:ArrayList类、Vector类、LinkedList类

集合(6):List接口的子类:ArrayList类、Vector类、LinkedList类

一、ArrayList类

1、ArrayList类的概述
底层数据结构是数组,查询快、增删慢
线程不安全,效率高
2、ArrayList案例
import java.util.ArrayList;
import java.util.Iterator;

/*
      使用ArrayList存储自定义对象并遍历
 */
public class ArrayListDemo1 {
    public static void main(String[] args) {
        //创建ArrayList集合对象
        ArrayList arrayList = new ArrayList();
        //创建5个学生对象
        Student s1 = new Student("李玉伟", 18);
        Student s2 = new Student("刘强东", 48);
        Student s3 = new Student("王健林", 67);
        Student s4 = new Student("马化腾", 50);
        Student s5 = new Student("马云", 57);

        //将学生对象添加到集合中
        arrayList.add(s1);
        arrayList.add(s2);
        arrayList.add(s3);
        arrayList.add(s4);
        arrayList.add(s5);

        System.out.println("======遍历方式1:迭代器遍历======");
        //获取迭代器
        Iterator iterator = arrayList.iterator();
        //遍历迭代器
        while (iterator.hasNext()){
            Object next = iterator.next();//获取元素
            Student s = (Student)next;//向下转型

            //使用getXxx()输出
            System.out.println(s.getName()+"===="+s.getAge());
        }

        System.out.println("======遍历方式2:get()和size()方法结合======");
        for(int i=0;i<arrayList.size();i++){
            Object o = arrayList.get(i);
            Student s = (Student)o;

            System.out.println(s.getName()+"===="+s.getAge());
        }
    }
}

执行结果如下:

======遍历方式1:迭代器遍历======
李玉伟====18
刘强东====48
王健林====67
马化腾====50
马云====57
======遍历方式2:get()和size()方法结合======
李玉伟====18
刘强东====48
王健林====67
马化腾====50
马云====57

Process finished with exit code 0

二、Vector类

1、Vector类的概述
底层数据结构是数组,查询快,增删慢;
线程安全的,效率低(虽然是线程安全的,以后我们也不使用它,后面会说一个线程安全的类替代它)
2、Vector特有的方法
(1)public void addElement(Object obj)
//向集合中添加元素,效果和add()一样,以后统一使用add()方法
(2)public Object elementAt(int index)
//传入索引参数,返回指定位置的元素,效果和get(int index)一样,以后统一使用get(int index)方法
(3)public Enumeration elements()
//返回此向量的组件的枚举

特有功能案例:

import java.util.Enumeration;
import java.util.Vector;

public class VetorDemo {
    public static void main(String[] args) {
        //创建Vetor集合对象
        Vector vector = new Vector();
        //向集合中添加元素(以字符串为例)
        vector.addElement("hello");
        vector.add("world");
        vector.addElement("java");
        System.out.println(vector);//[hello, world, java]
        //打印的能看懂,说明Vector重写了toString()方法
        /*
            当用add()和addElement()添加元素时,效果一样
            那么以后我们统一使用add()
         */
		System.out.println("===============");
        //调用Vector类特有的方法:public Object elementAt(int index)
        //传入索引参数,返回指定位置的元素
        Object o = vector.elementAt(0);//传入一个索引值
        Object o1 = vector.get(0);
        System.out.println(o);//hello
        System.out.println(o1);//hello
        /*
            当用get()和elementAt()获取元素时,效果一样
            那么以后我们统一使用get()
         */
		System.out.println("===============");
        //调用Vector类特有的方法:public Enumeration elements()
        //返回此向量的组件的枚举
        Enumeration elements = vector.elements();
        System.out.println(elements);//java.util.Vector$1@1540e19d
        //返回的是地址值,说明Enumeration没有重写toString()方法

        //要想输出Vector集合中的元素,改进如下
        while (elements.hasMoreElements()){
            Object o2 = elements.nextElement();
            //未使用迭代器,不需要转型
            System.out.println(o2);
        }
    }
}

执行结果如下:

[hello, world, java]
===============
hello
hello
=================
java.util.Vector$1@1540e19d
hello
world
java

Process finished with exit code 0

三、LinkedList类

1、LinkedList类的概述
底层数据结构为链表,查询慢,增删快;
线程不安全的,效率高
2、LinkedList类特有的方法
(1)添加功能:
void addFirst(Object obj) 在该列表开头插入指定的元素
void addLast(Object obj) 将指定的元素追加到此列表的末尾。等同于add()方法
(2)获取功能:
Object getFirst() 返回此列表中的第一个元素
Object getLast() 返回此列表中的最后一个元素
(3)删除功能:
Object removeFirst() 从此列表中删除并返回第一个元素
Object removeLast() 从此列表中删除并返回最后一个元素

特有方法的案例:

import java.util.LinkedList;

public class LinkedListDemo {
    public static void main(String[] args) {
        //创建LinkedList集合对象
        LinkedList linkedList = new LinkedList();
        //向LinkedList集合中添加元素
        linkedList.add("hello");
        linkedList.add("world");
        linkedList.add("java");
        linkedList.add("hadoop");
        linkedList.add("hive");
        linkedList.add("spark");
        System.out.println(linkedList);//[hello, world, java, hadoop, hive, spark]
        //说明LinkedList类重写了toString()方法

        System.out.println("====调取添加功能====");
        //void addFirst(Object obj) 在该列表开头插入指定的元素
        linkedList.addFirst("flink");
        System.out.println(linkedList);//[flink, hello, world, java, hadoop, hive, spark]

        //void addLast(Object obj) 将指定的元素追加到此列表的末尾,等同于add()方法
        linkedList.addLast("Hbase");
        System.out.println(linkedList);//[flink, hello, world, java, hadoop, hive, spark, Hbase]

        System.out.println("====调取获取功能====");
        //Object getFirst() 返回此列表中的第一个元素
        Object first = linkedList.getFirst();
        System.out.println(first);//flink

        //Object getLast() 返回此列表中的最后一个元素
        Object last = linkedList.getLast();
        System.out.println(last);//Hbase

        System.out.println("====调取删除功能====");
        //Object removeFirst() 从此列表中删除并返回第一个元素
        Object o = linkedList.removeFirst();
        System.out.println(o);//flink
        System.out.println(linkedList);//[hello, world, java, hadoop, hive, spark, Hbase]

        //Object removeLast() 从此列表中删除并返回最后一个元素
        Object o1 = linkedList.removeLast();
        System.out.println(o1);//Hbase
        System.out.println(linkedList);//[hello, world, java, hadoop, hive, spark]
    }
}

执行结果如下:

[hello, world, java, hadoop, hive, spark]
====调取添加功能====
[flink, hello, world, java, hadoop, hive, spark]
[flink, hello, world, java, hadoop, hive, spark, Hbase]
====调取获取功能====
flink
Hbase
====调取删除功能====
flink
[hello, world, java, hadoop, hive, spark, Hbase]
Hbase
[hello, world, java, hadoop, hive, spark]

Process finished with exit code 0
3、LinkedList类的案例

(1)存储字符串并遍历

(2)存储自定义对象并遍历

posted @ 2021-12-28 11:13  阿伟宝座  阅读(119)  评论(0)    收藏  举报