Java List不同实现类的对比

avatar
作者
筋斗云
阅读量:6

List不同实现类的对比

文章目录

  • java.util.Collection用于存储一个一个数据的框架
  • 子接口:List存储有序的、可重复的数据(相当于动态数组)
    • ArrayList list的主要实现类(线程不安全、效率高) 底层使用Object[]的数组存储。添加数据、查找数据时,效率较高;插入数据、删除数据时,效率较低
    • Vector List的古老实现类 (线程安全、效率低) 底层使用Object[]数组存储
    • LinkedList 底层使用双向链表的方式进行存储。插入数据、删除数据时效率较高;添加数据、查找数据时,效率较低。

实现类之一ArrayList

  • ArrayList 是 List 接口的主要实现类

  • 本质上,ArrayList是对象引用的一个”变长”数组

  • Arrays.asList(…) 方法返回的 List 集合,既不是 ArrayList 实例,也不是 Vector 实例。 Arrays.asList(…) 返回值是一个固定长度的 List 集合

实现类之二 LinkedList

对于频繁的插入或删除元素的操作,建议使用LinkedList类,效率较高。这是由底层采用链表(双向链表)结构存储数据决定的。

特有方法:

  • void addFirst(Object obj)
  • void addLast(Object obj)
  • Object getFirst()
  • Object getLast()
  • Object removeFirst()
  • Object removeLast()

实现类之三 Vector

  • Vector 是一个古老的集合,JDK1.0就有了。大多数操作与ArrayList相同,区别之处在于Vector是线程安全的。
  • 在各种List中,最好把ArrayList作为默认选择。当插入、删除频繁时,使用LinkedList;Vector总是比ArrayList慢,所以尽量避免使用。
  • 特有方法:
    • void addElement(Object obj)
    • void insertElementAt(Object obj,int index)
    • void setElementAt(Object obj,int index)
    • void removeElement(Object obj)
    • void removeAllElements()

练习

键盘录入学生信息,保存到集合List中

  • 定义学生类。存在姓名、年龄的属性
  • 使用ArrayList集合,保存录入的多个学生对象
  • 循环录入方式
  • 录入结束后,用迭代器遍历
//学生类 public class Student {    private String name;    private int age;     public Student(String name, int age) {        this.name = name;        this.age = age;    }    public Student(){     }     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;    }     @Override    public String toString() {        return "Student{" +                "name='" + name + '\'' +                ", age=" + age +                '}';    }     @Override    public boolean equals(Object o) {        if (this == o) return true;        if (o == null || getClass() != o.getClass()) return false;        Student student = (Student) o;        return age == student.age && Objects.equals(name, student.name);    }     @Override    public int hashCode() {        return Objects.hash(name, age);    } } 
//Test类 import java.util.ArrayList; import java.util.Scanner;  public class StudentTest {    public static void main(String[] args) {        Scanner input = new Scanner(System.in);        ArrayList list = new ArrayList();        System.out.println("请录入学生信息:");        while(true){            System.out.println("1,继续录入  0.结束录入");            int selection = input.nextInt();            if(selection == 0){                break;            }            System.out.println("请输入学生的姓名:");            String name = input.next();            System.out.println("请输入学生的年龄");            int age = input.nextInt();            Student s = new Student(name,age);            list.add(s);        }        //遍历集合中的学生信息        System.out.println("遍历学生信息");        for(Object s : list){            System.out.println(s.toString());        }        input.close();    } } 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!