You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Studio(Java)中高效存储300+带释义单词

适合Android难词应用的本地存储方案

一、内存层面高效数据结构(解决删除效率问题)

你的场景只有300余个单词,其实ArrayList的性能影响基本可以忽略,但如果追求极致删除效率,这些结构更合适:

  • LinkedHashSet:将单词和释义封装成Word对象后存入,删除操作复杂度为O(1),还能保持插入顺序。注意重写Word类的equals和hashCode方法,避免重复元素。
  • HashMap<Integer, Word>:用原数组索引作为key,封装后的Word对象作为value,删除时直接调用remove(key),无需移动其他元素,操作效率O(1),同时保留原有索引对应关系。
  • 自定义双向链表:自己实现包含单词、释义的节点类,双向链表删除操作也是O(1),但需要手动维护节点引用,300条数据的话属于过度优化,仅适合对底层实现有特殊需求的场景。

二、持久化存储方案(避免重启后数据丢失)

如果需要保存修改后的数据,无需第三方云数据库,这些本地方案足够:

  • SharedPreferences:适合存储少量键值对,可将单词/索引作为key、释义作为value存储,300条数据完全能应付,缺点是结构不够直观,适合简单场景。
  • 本地JSON文件存储:用Gson将Word对象集合序列化为JSON字符串,写入应用内部存储;读取时反序列化回对象集合。这种方式灵活可控,不需要依赖数据库框架。
  • SQLite+Room:Android自带的本地数据库,删除操作通过SQL语句执行效率高,还支持查询、排序等复杂操作。Room是SQLite的官方封装,用注解定义实体和DAO,代码更简洁,适合后续功能扩展(比如添加记忆进度、收藏标记)。

代码示例(HashMap+Gson持久化)

  1. 封装Word实体类:
public class Word {
    private String word;
    private String meaning;

    public Word(String word, String meaning) {
        this.word = word;
        this.meaning = meaning;
    }

    public String getWord() { return word; }
    public String getMeaning() { return meaning; }
}
  1. 内存中用HashMap管理数据:
private HashMap<Integer, Word> wordMap = new HashMap<>();

// 初始化:将原有数组转存到HashMap
for (int i = 0; i < wordArray.length; i++) {
    wordMap.put(i, new Word(wordArray[i], meaningArray[i]));
}

// 删除操作:O(1)复杂度
wordMap.remove(targetIndex);
  1. 用Gson实现持久化:
// 保存数据到内部存储
Gson gson = new Gson();
String json = gson.toJson(new ArrayList<>(wordMap.values()));
try {
    FileOutputStream fos = openFileOutput("words.json", Context.MODE_PRIVATE);
    fos.write(json.getBytes());
    fos.close();
} catch (IOException e) {
    e.printStackTrace();
}

// 从内部存储读取数据
try {
    FileInputStream fis = openFileInput("words.json");
    BufferedReader br = new BufferedReader(new InputStreamReader(fis));
    StringBuilder sb = new StringBuilder();
    String line;
    while ((line = br.readLine()) != null) {
        sb.append(line);
    }
    List<Word> wordList = gson.fromJson(sb.toString(), new TypeToken<List<Word>>(){}.getType());
    // 将读取的列表重新转存到HashMap
    for (int i = 0; i < wordList.size(); i++) {
        wordMap.put(i, wordList.get(i));
    }
    fis.close();
} catch (IOException e) {
    e.printStackTrace();
}

内容的提问来源于stack exchange,提问作者QuackBlast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 01:20:46