2

为什么SharedPreferences.Editor有方法putStringSet()但没有方法putStringList()?这对我来说没有任何意义。我的理解(这可能是错误的)是SharedPreferences对象是使用内部存储的xml,并且xml支持数组。

我知道一个SharedPreference对象旨在成为少量数据的简单对象,因此您不希望拥有太多put方法,但我想如果您要拥有putStringSet()or之一putStringList()putStringList()则更普遍有用(一组可以保存为列表,但反之不行)并且更易于实现。谁能解释一下?

4

1 回答 1

2

我不是源代码的实现者,但如果您考虑一下,SharedPreferences 所在的 KV 存储库非常简单。所以你有 putString() 并且你有 put StringSet()。使用 StringSet 变体来保存多个字符串对实际的存储解决方案没有任何限制。即,如果它不是一个 XML 文件,而是一个 sqlite 数据库,那么您可以使用该键和该类型查询表中的所有值。无论 sql 引擎以何种方式命令它们,都将按原样进行。但是,如果您必须保持顺序,则必须引入将强加于所有其他数据类型的新结构,例如顺序列。即使在 XML 中,这也需要更多的存储空间和更多的复杂性来表示一个是有序的,一个是非有序的。

在我看来,只要 SharedPreferences 支持 putString 和 putStringSet 就可以实现有序和非有序存储。

IE

String orderedString = TextUtils.join(mySafeDeliminator, myListOfStrings);
preferences.edit().putString("key", orderedString).apply();

....
String orderedReturnedString = preferences.getString("key");
List<String> listOfStrings = Arrays.asList(TextUtils.split(orderedReturnedString, mySafeDeliminator));
于 2015-09-14T16:16:39.247 回答