Java集合类——实现类 ArrayList 类、Vector 类、LinkedList 类

在这里插入图片描述

ArrayList(数组列表) 和 LinkedList(链表) 同属于 List 接口的实现类,是 List 的子类

一、ArrayList类

1、概述

  • 底层数据结构是数组,查询快,增删慢
  • 线程不安全,效率高

2、ArrayList 案例

  • 存储字符串并遍历
package shuzuliebiao;

import java.util.ArrayList;
import java.util.Iterator;

public class ArrayListDemo {
    public static void main(String[] args){
        ArrayList arr = new ArrayList();//创建集合对象
        arr.add("let's");
        arr.add("make");
        arr.add("love");
        for (int i = 0; i < arr.size(); i++){//循环输出集合中的每一个值
            String s = (String) arr.get(i);
            System.out.println(s);
        }
        System.out.println("------------------------------------");
        //遍历
        Iterator it = arr.iterator();//集合上的迭代器,元素的迭代器返回的类型
        while (it.hasNext()){
            String s = (String) it.next();
            System.out.println(s);
        }
    }
}

运行后显示:在这里插入图片描述

  • 存储自定义对象并遍历
    创建 Nvyou.java 文件
package shuzuliebiao;

public class Nvyou {
    private String name;
    private int age;

    public Nvyou(){
        super();
    }
    public Nvyou(String name, int age){
        super();
        this.name = name;
        this.age = age;
    }
    //创建 get set 方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

创建 ArrayListDemo.java 文件

package shuzuliebiao;

import java.util.ArrayList;
import java.util.Iterator;

public class ArrayListDemo {
    public static void main(String[] args){
        ArrayList arr = new ArrayList();//创建集合对象
        //创建女优对象
        Nvyou n1 = new Nvyou("苍井空",18);
        Nvyou n2 = new Nvyou("波多野结衣",19);
        Nvyou n3 = new Nvyou("泷泽萝拉",20);
        Nvyou n4 = new Nvyou("小泽玛利亚",21);
        //把女优对象添加到集合中
        arr.add(n1);
        arr.add(n2);
        arr.add(n3);
        arr.add(n4);
        //通过for 循环遍历
        for (int i = 0; i < arr.size(); i++){
            Nvyou n = (Nvyou) arr.get(i);//注意类型转换的写法
            System.out.println("姓名:"+n.getName()+"---年龄:"+n.getAge());
        }
        System.out.println("-------------------------------");

        //通过集合上的 Iterator 迭代器 hasNext()、Next() 遍历
        Iterator it = arr.iterator();
        while (it.hasNext()){
            Nvyou n = (Nvyou) it.next();
            System.out.println("姓名:"+n.getName()+"---年龄:"+n.getAge());
        }
    }
}

运行显示:在这里插入图片描述

  • ArrayList去除集合中字符串的重复值(字符串的内容相同)
package shuzuliebiao;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ArrayListDemo {
    public static void main(String[] args){
        ArrayList arr = new ArrayList();//创建集合对象
        //向集合中添加多个元素,包括相同的元素
        arr.add("hello");
        arr.add("java");
        arr.add("HELLO");
        arr.add("JAVA");
        arr.add("hello");
        arr.add("java");
        arr.add("hello");
        System.out.println(arr);
        System.out.println("---------------------------");
        List l = new ArrayList();//新建集合
        for (int i = 0; i < arr.size(); i++){
            String s = (String) arr.get(i);
            if (!l.contains(s)){
                l.add(s);
            }
        }
        Iterator it = l.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
    }
}

在上面的案例中,新建了一个集合 l;如果不新建集合的话

package shuzuliebiao;

import java.util.ArrayList;
import java.util.Iterator;

public class ArrayListDemo {
    public static void main(String[] args){
        ArrayList arr = new ArrayList();//创建集合对象
        //向集合中添加多个元素,包括相同的元素
        arr.add("hello");
        arr.add("java");
        arr.add("HELLO");
        arr.add("JAVA");
        arr.add("hello");
        arr.add("java");
        arr.add("hello");
        System.out.println(arr);
        System.out.println("---------------------------");
        //List l = new ArrayList();
        for (int i = 0; i < arr.size() - 1; i++){
            for (int j = i + 1; j < arr.size(); j++) {
                if (arr.get(i).equals(arr.get(j))) {
                    arr.remove(j);
                    j--;
                }
            }
        }
        Iterator it = arr.iterator();
        while (it.hasNext()){
            String s = (String) it.next();
            System.out.println(s);
        }
    }
}
  • 去除集合中自定义对象的重复值(对象的成员变量值都相同)

第一步:创建Nvyou.java 封装类

 package shuzuliebiao;

public class Nvyou {
    private String name;
    private int age;

    public Nvyou(){
        super();
    }
    public Nvyou(String name, int age){
        super();
        this.name = name;
        this.age = age;
    }
    //创建 get set 方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

第二步:创建 ArrayDemo.java 文件

package shuzuliebiao;

import java.util.ArrayList;
import java.util.Iterator;

public class ArrayListDemo {
    public static void main(String[] args){
        ArrayList arr = new ArrayList();
        Nvyou n1 = new Nvyou("苍井空",18);
        Nvyou n2 = new Nvyou("小泽玛利亚",19);
        Nvyou n3 = new Nvyou("泷泽萝拉",20);
        Nvyou n4 = new Nvyou("苍井空",21);//和第一个年龄不同
        Nvyou n5 = new Nvyou("苍井空",18);//和第一个完全相同
        //添加元素
        arr.add(n1);
        arr.add(n2);
        arr.add(n3);
        arr.add(n4);
        arr.add(n5);
        ArrayList newarr = new ArrayList();//创建新集合
        //遍历旧集合,获取每一个元素
        Iterator it = arr.iterator();
        while(it.hasNext()){
            Nvyou n = (Nvyou) it.next();
            if (!newarr.contains(n)){// 拿这个元素到新集合去找,看有没有,调用equals方法默认比较内存地址,这是重写equals方法
                newarr.add(n);
            }
        }
        //遍历新集合
        for (int i = 0; i < newarr.size(); i++){
            Nvyou s = (Nvyou) newarr.get(i);
            System.out.println(s.getName() + "---" + s.getAge());
        }
    }
}

二、Vector 类

1、概述

  • Vector:向量;矢量
  • 底层数据结构是数组,查询快,增删慢
  • 线程安全,效率低

2、Vector 类特有功能

  • public void addElement(E obj)
  • public E elementAt(int index)
  • public Enumeration elements()

3、Vector 案例

  • 存储字符串并遍历
package Vector;

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

public class VectorDemo {
    public static void main(String[] args){
        Vector v = new Vector();//创建集合对象
        //添加元素
        v.add("I");
        v.addElement("love");
        v.addElement("java");
        //通过for 循环遍历
        for (int i = 0; i < v.size(); i++){
            String s = (String) v.elementAt(i);
            System.out.println(s);
        }
        System.out.println("------------------------");
        Enumeration en = v.elements();//返回实现类的对象,一个实现枚举接口的对象生成一系列元素,一个在一个时间。
        while (en.hasMoreElements()){
            String s = (String)en.nextElement();
            System.out.println(s);
        }
    }
}

三、LinkedList 类

1、概述

  • 底层数据结构是链表,查询慢,增删快
  • 线程不安全,效率高

2、LinkedList类特有功能

  • public void addFirst(E e)及addLast(E e)
  • public E getFirst()及getLast()
  • public E removeFirst()及public E removeLast()
package LinkedList;

import java.util.Iterator;
import java.util.LinkedList;

public class LinkedListDemo {
    public static void main(String[] args){
        LinkedList link = new LinkedList();//创建集合对象
        link.add("I");
        link.add("love");
        link.add("java");
        System.out.println(link);

        link.addFirst("Lemon");
        link.addLast("python");
        System.out.println(link);
        System.out.println(link.getFirst());//获取link 集合中的第一个元素
        System.out.println(link.getLast());//获取link 集合中的最后一个元素
        System.out.println("----------------------------");
        System.out.println(link.removeFirst());//移除第一个元素
        System.out.println(link);
        System.out.println(link.removeLast());//移除最后一个元素
        System.out.println(link);
        System.out.println("+++++++++++++++++++++++++++++++");
        //使用for 循环输出每一个元素
        for (int i = 0; i < link.size(); i++){
            System.out.println(link.get(i));
        }
        System.out.println("_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+");
        //使用迭代器输出每一个元素
        Iterator it = link.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
    }
}

运行输出:
在这里插入图片描述
3、LinkedList 案例

  • 存储字符串并遍历
  • 存储自定义对象并遍历

四、总结

1、List 子类的特点

  • ArrayList:

    底层数据结构是数组,查询快,增删慢
    线程不安全,效率高

  • Vector:

    底层数据结构是数组,查询快,增删慢
    线程安全,效率低

  • LinkedList:

    底层数据结构是链表,查询慢,增删快
    线程不安全,效率高

猜你喜欢

转载自blog.csdn.net/weixin_43860260/article/details/92073377