当前位置: 首页 > news >正文

Java List不同实现类的对比

List不同实现类的对比

文章目录

  • List不同实现类的对比
    • 实现类之一`ArrayList`
    • 实现类之二 `LinkedList`
    • 实现类之三 `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集合,保存录入的多个学生对象
  • 循环录入方式
  • 录入结束后,用迭代器遍历
//学生类
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;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic 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);}@Overridepublic 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();}
}
http://www.lryc.cn/news/397959.html

相关文章:

  • 【C语言】 —— 预处理详解(下)
  • Jupyter Notebook简介
  • ChatGPT 5.0:一年后的猜想
  • Java套红:指定位置合并文档-NiceXWPFDocument
  • 【操作系统】进程管理——进程的同步与互斥(个人笔记)
  • Qt:13.多元素控件(QLinstWidget-用于显示项目列表的窗口部件、QTableWidget- 用于显示二维数据表)
  • 恢复出厂设置手机变成砖
  • 解决IntelliJ IDEA中克隆GitHub项目不显示目录结构的问题
  • Git错误分析
  • pom.xml中重要标签介绍
  • 大模型日报 2024-07-11
  • Redis基础教程(十六):Redis Stream
  • 机器学习筑基篇,容器调用显卡计算资源,Ubuntu 24.04 快速安装 NVIDIA Container Toolkit!...
  • 全网第一个java链接阿里云redis并可操作
  • Mysql ORDER BY是否走索引?
  • 图纸文档管理新篇章:陕西航沣与三品软件合作 优化研发流程
  • 链式队列的实现
  • 深入剖析3D企业云展厅的价值,多维展示和精准营销的创新结合
  • 前台线程和后台线程(了解篇)
  • 最强文本编辑器 VIM 指令大全
  • 卤味江湖中,周黑鸭究竟该抓住什么赛点?
  • 2024年西安铁一中集训DAY1---- 杂题选讲
  • Python爬虫:BeautifulSoup的基本使用方法!
  • 【自监督学习】DINO in ICCV 2021
  • 使用simulink进行esp32开发,进行串口收发数据需要注意的地方,为什么收发不成功
  • 多周期路径的约束与设置原则
  • 【算法】反转链表
  • DevEco Studio No device 无法识别 usb 设备 - 鸿蒙
  • WebRTC API接口教程:实现高效会议的步骤?
  • MinIO - 服务端签名直传(前端 + 后端 + 效果演示)