Java自定义集合-基于文件的泛型列表 LocalFileArrayList

news/2024/9/20 6:06:00 标签: java, List, 自定义集合, 集合

Java实现基于文件的泛型列表 LocalFileArrayList

    • 简介
    • 核心概念
      • 泛型
      • 文件操作
    • 实现细节
      • 构造函数
      • 读取和写入文件
      • 类型转换
      • List 接口方法实现
    • 总结
    • 调用示例
    • 完整代码

在这里插入图片描述

简介

LocalFileArrayList我自己随便起的,没怎么思考,不一定是最适合的名字。搞这东西主要是有些需求用到的数据量太大了,在并不最求效率只最求结果的背景下,用文件来实现列表功能可以解决量大溢出的烦恼,而且还能保留List操作的丝滑手感,觉得有必要记录分享下。

在Java中,List 是一个非常常用的接口,用于存储元素集合。然而,标准的 List 实现(如 ArrayListLinkedList)都是基于内存的。在某些情况下,我们可能需要将列表持久化到文件中,以便在程序重启后仍然能够访问这些数据。本文将介绍如何实现一个基于文件的泛型列表 LocalFileArrayList,它能够将数据存储在文件中,并且支持泛型,以确保类型的安全性。

核心概念

泛型

Java的泛型机制允许在编译时进行类型检查,从而避免类型转换的错误和运行时异常。在我们的 LocalFileArrayList 实现中,泛型 T 用于指定列表中元素的类型。

文件操作

LocalFileArrayList 通过文件系统来持久化数据。我们使用 File 类来表示文件,并通过 BufferedReaderBufferedWriter 进行文件的读写操作。

实现细节

构造函数

构造函数 LocalFileArrayList(String fileName, Class<T> type) 接受文件名和元素类型作为参数。如果文件已存在,则删除并重新创建,确保列表是空的。

java">public LocalFileArrayList(String fileName, Class<T> type) throws IOException {
   
    this.file = new File(fileName);
    this.type = type;
    if (file.exists()) {
   
        file.delete();
    }
    file.createNewFile();
}

读取和写入文件

我们定义了 readAllLineswriteAllLines 方法来分别读取和写入文件中的所有行。这些方法使用 BufferedReaderBufferedWriter 来优化读写性能。

java">private List<String> readAllLines() throws IOException {
   
    BufferedReader reader = new BufferedReader(new FileReader(file));
    List<String> lines = new ArrayList<>();
    String line;
    while ((line = reader.readLine()) != null) {
   
        lines.add(line);
    }
    reader.close();
    return lines;
}

private void writeAllLines(List<String> lines) throws IOException {
   
    BufferedWriter writer = new BufferedWriter(new FileWriter(file));
    for (String line : lines) {
   
        writer.write(line);
        writer.newLine();
    }
    writer.close();
}

类型转换

为了支持泛型,我们实现了 convertStringToTypeconvertTypeToString 方法来在字符串和泛型类型之间进行转换。目前,我们支持 IntegerString 类型,但可以根据需要扩展以支持更多类型。

java">private T convertStringToType(String value) {
   
    if (type == Integer.class) {
   
        return type.cast(Integer.parseInt(value));
    } else if (type == String.class) {
   
        return type.cast(value);
    }
    throw new IllegalArgumentException("Unsupported type: " + type);
}

private String convertTypeToString(T value) {
   
    return value.toString();
}

List__81">List 接口方法实现

我们实现了 List 接口中的一些基本方法,如 addgetremove 等。对于其他未实现的方法,我们抛出了 UnsupportedOperationException

java">@Override
public boolean add(T element) {
   
    try (BufferedWriter writer = new BufferedWriter

http://www.niftyadmin.cn/n/5666695.html

相关文章

Qt | linux+openCV+Qt6.5.3环境搭建成功版(带例子)

​点击上方"蓝字"关注我们 01、openCV安装 >>> 一. 安装OpenCV库: 打开终端,输入以下命令安装OpenCV: sudo apt-get updatesudo apt-get install libopencv-dev 库默认安装在了这个目录 usr/lib/x86_64-linux-gnu/libopencv_videostab.so.4.2/usr/lib…

【Linux进程控制】进程程序替换

目录 进程程序替换 替换函数 看现象 替换原理 多进程替换 exec*函数使用&#xff08;部分&#xff09;&#xff0c;并且认识函数参数的含义 1.execl 2.execv 3.execvp 4.execvpe execlp 和execlpe 替换函数总结 进程程序替换 替换函数 有六种以exec开头的函数&am…

鸿蒙OpenHarmony【轻量系统芯片移植案例】标准系统方案之瑞芯微RK3566移植案例

标准系统方案之瑞芯微RK3566移植案例 本文章是基于瑞芯微RK3566芯片的khdvk_3566b开发板&#xff0c;进行标准系统相关功能的移植&#xff0c;主要包括产品配置添加&#xff0c;内核启动、升级&#xff0c;音频ADM化&#xff0c;Camera&#xff0c;TP&#xff0c;LCD&#xff…

Netmiko:简化网络设备自动化的强大工具

在当今快速发展的网络环境中,自动化已成为网络工程师的必备技能。Netmiko作为一个强大的Python库,为网络设备自动化提供了简单而有效的解决方案。本文将深入探讨Netmiko的特性、使用方法及其在网络自动化中的应用。 什么是Netmiko? Netmiko是一个基于Python的多厂商网络设备…

POI操作EXCEL插入图片

文章目录 POI操作EXCEL插入图片 POI操作EXCEL插入图片 依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version> </dependency> <dependency><groupId>org.a…

opencv编译报错 libavcodec.a(hevc cabac.o)

1、opencv编译报错&#xff1a;libavcodec.a(hevc cabac.o): relocation R X86 64 PC32 against ff w ff can not be used when makin with -fPlC 需要将ffmpeg在配置的时候./configure --enable-nonfree --enable-pic --enable-shared --disable-x86asm&#xff0c;然后安装ff…

SalescustomerController

目录 1、 SalescustomerController 1.1、 Sales 1.2、 /// 销售客户单号 1.3、 /// 查询客户区域 using QXQPS.Models; using QXQPS.Vo; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespac…

前端开发之原型模式

介绍 原型模式本质就是借用一个已有的实例做原型&#xff0c;在这原型基础上快速复制出一个和原型一样的一个对象。 class CloneDemo {name clone democlone(): CloneDemo {return new CloneDemo()} } 原型原型链 函数&#xff08;class&#xff09;都有显示原型 prototyp…