List不同实现类的对比
文章目录
- List不同实现类的对比
-
- 实现类之一`ArrayList`
- [实现类之二 `LinkedList`](#实现类之二
LinkedList
) - [实现类之三 `Vector`](#实现类之三
Vector
) - 练习
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集合,保存录入的多个学生对象
- 循环录入方式
- 录入结束后,用迭代器遍历
java//学生类 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); } }
java//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(); } }