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

如何在SharedPreferences中存储Set<Set<String>>类型数据?

解决SharedPreferences存储Set<Set>的问题

SharedPreferences确实只支持直接存储基本类型和Set<String>,嵌套的Set<Set<String>>没法直接用putStringSet()存。不过有两个很实用的方案可以搞定这个问题,我平时做Android开发经常用:

方案一:用Gson序列化(推荐)

Gson可以轻松把复杂集合转换成JSON字符串,存成普通的String类型,取出来再反序列化回去,代码简洁还不容易出错。

步骤:

  1. 首先确保你的项目里引入了Gson依赖(如果是Android项目,在build.gradle里加):
implementation 'com.google.code.gson:gson:2.10.1'
  1. 存储时,把Set<Set<String>>转成JSON字符串:
SharedPreferences prefs = getSharedPreferences("MyPrefs", MODE_PRIVATE);
Set<Set<String>> nestedSet = new HashSet<>();
// 假设你已经填充了nestedSet的数据

Gson gson = new Gson();
String nestedSetJson = gson.toJson(nestedSet);

prefs.edit().putString("nested_set_key", nestedSetJson).apply();
  1. 读取时,把JSON字符串反序列化成Set<Set<String>>:
String nestedSetJson = prefs.getString("nested_set_key", "[]");
Type type = new TypeToken<Set<Set<String>>>(){}.getType();
Set<Set<String>> nestedSet = gson.fromJson(nestedSetJson, type);

方案二:手动拼接字符串(无需第三方库)

如果不想引入Gson,也可以自己手动处理:把内层的每个Set<String>用特定分隔符拼成一个字符串,然后外层变成Set<String>,再用putStringSet()存储。读取的时候再反向拆分。

步骤:

  1. 存储时,转换嵌套集合:
SharedPreferences prefs = getSharedPreferences("MyPrefs", MODE_PRIVATE);
Set<Set<String>> nestedSet = new HashSet<>();
// 填充数据

Set<String> flatSet = new HashSet<>();
// 用两个不同的分隔符,比如内层用"|",外层用普通的Set存储(SharedPreferences会自动处理外层的Set)
for (Set<String> innerSet : nestedSet) {
    String innerStr = String.join("|", innerSet);
    flatSet.add(innerStr);
}

prefs.edit().putStringSet("nested_set_key", flatSet).apply();
  1. 读取时,拆分字符串还原嵌套集合:
Set<String> flatSet = prefs.getStringSet("nested_set_key", new HashSet<>());
Set<Set<String>> nestedSet = new HashSet<>();

for (String innerStr : flatSet) {
    Set<String> innerSet = new HashSet<>(Arrays.asList(innerStr.split("\\|")));
    nestedSet.add(innerSet);
}

⚠️ 注意:这个方法要确保你的数据里不会出现你用的分隔符(比如上面的"|"),如果可能出现,记得先对数据做转义处理,避免拆分出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:32:38