Java 如何在SharedReferences中存储ArrayList?
我有一个分类的Java 如何在SharedReferences中存储ArrayList?,java,android,arraylist,sharedpreferences,hashset,Java,Android,Arraylist,Sharedpreferences,Hashset,我有一个分类的ArrayList联系人列表。我想将列表存储在SharedReference中。我尝试了以下代码: SharedPreferences.Editor editor = app_preference.edit(); Set<String> set = new HashSet<String>(); set.addAll(contact_names_list); editor.putStringSet("CONTACT_LIST", set); editor.ap
ArrayList
联系人列表。我想将列表存储在SharedReference
中。我尝试了以下代码:
SharedPreferences.Editor editor = app_preference.edit();
Set<String> set = new HashSet<String>();
set.addAll(contact_names_list);
editor.putStringSet("CONTACT_LIST", set);
editor.apply();
SharedReferences.Editor=app_preference.edit();
Set=newhashset();
set.addAll(联系人姓名列表);
编辑器.putStringSet(“联系人列表”,set);
editor.apply();
问题是,当我从HashSet
检索这个时,我得到了一个未排序的列表。除了Hashset
之外,还有其他方法存储ArrayList
吗?检索值
Set<String> set = myScores.getStringSet("CONTACT_LIST", null);
Set Set=myScores.getStringSet(“联系人列表”,null);
这样做-:
SharedPreferences.Editor editor = app_preference.edit();
Set<String> set = new HashSet<String>();
set.addAll(contact_names_list);
editor.putStringSet("CONTACT_LIST", set);
editor.apply();
or
Prefs.with(getAppContext()).putStringSet("CONTACT_LIST", set);
SharedReferences.Editor=app_preference.edit();
Set=newhashset();
set.addAll(联系人姓名列表);
编辑器.putStringSet(“联系人列表”,set);
editor.apply();
或
Prefs.with(getAppContext()).putStringSet(“联系人列表”,set);
使用以下代码检索值-:
Set<String> existindData = Prefs.with(getAppContext()).getStringSet("CONTACT_LIST", null);
Set existindData=Prefs.with(getAppContext()).getStringSet(“联系人列表”,null);
我们可以使用Java 8排序方式对集合进行排序。
Set s=newhashset();
s、 添加(“库纳尔”);
s、 添加(“Bhism”);
s、 添加(“工作”);
s、 添加(“Abdgg”);
s、 添加(“PSS”);
s、 添加(“工作”);
List l=s.stream().sorted().collect(Collectors.toList());
系统输出打印LN(l)代码>
尝试上面的代码,您现在将获得排序的哈希集。正如Android文档所解释的,共享首选项是保存键值数据的一种方法。考虑到字典在幕后几乎可以以随机顺序保存,所以无法按顺序检索某些内容。不过,我可以推荐几种解决方案:
简单但性能不好的方法:添加索引作为值的一部分,因此您可以创建一个具有哈希集大小的数组,然后迭代哈希集并添加您创建的数组中的每个元素。O(N)时间复杂性加上文件读取过程中涉及的复杂性
将数据保存在本地SQLite数据库中:此解决方案在将来更加灵活(您可以添加新联系人)。通常,您创建自己的SQLite数据库,将其放入资产中,然后导入。您可以创建查询,以便按照您想要的顺序进行查询(可能会为此创建一列)
简单不可扩展选项:在values文件夹中
始终可以创建一个strings.xml
文件,您可以将该数据作为字符串数组
A.
B和用户
C
D
E
如果你需要更结构化的东西,我已经做过类似的事情(保存为JSON)
{id:1,name:Performance,sub:[{id:2,name:Scalability},{id:3,name:Response\u Time}]}
{id:4,name:Security,sub:[{id:5,name:Availability,sub:[{id:6,name:Reliability},{id:7,name:Recovery}]},{id:8,name:Privacy}]}
{id:9,name:Interoperability}
{id:10,名称:维修性}
{id:12,name:Testability}
{id:13,name:Usability,sub:[{id:14,name:Findability},{id:15,name:correction}]}
在我的代码中:
String[] elementsArray = getResources().getStringArray(
R.array.quality_attributes);
for (int i = 0; i < attributesArray.length; i++) {
Gson gson = new Gson();
MyJsonObject obj = gson.fromJson(elementsArray[i],
MyJsonObject.class);
// Do something
}
String[]elementsArray=getResources().getStringArray(
R.数组。质量属性);
for(int i=0;i
一般来说,如果你想改变某些东西,第二种选择是最好的。如果您正在寻找一些简单的东西,那么第三个选项就足够了。因为putStringSet
接受任何实现Set
接口的类
您可以使用保留插入顺序的LinkedHashSet
记录:
此实现与HashSet的不同之处在于它维护
贯穿其所有条目的双链接列表。此链接
列表定义了迭代顺序,即
元素被插入到集合中(插入顺序)
HashSet
不保留插入顺序,这就是这里的问题所在
// ...
Set<String> set = new LinkedHashSet<String>();
// insert from ArrayList
set.addAll(contact_names_list);
// or single elements
set.add("Homer");
set.add("Marge");
editor.putStringSet("CONTACT_LIST", set);
/。。。
Set Set=newlinkedhashset();
//从ArrayList插入
set.addAll(联系人姓名列表);
//还是单一元素
集合。添加(“荷马”);
集合。添加(“Marge”);
编辑器.putStringSet(“联系人列表”,set);
为什么不直接使用数据库呢?它将使事情变得更容易共享首选项以xml格式存储值,数据库是更好的选择option@WilliMentzel这可能是一个有序的列表。。。那么,要对它进行排序,有什么变化?@NoiseGenerator它怎么可能是一个有序列表?这是他案子中的一个哈希集。他如何知道检索后的插入顺序?那么信息就丢失了。请看我的答案。也许我没想清楚:D@Gibs如果从已排序的列表中删除项目,则生成的列表仍然是有序的。那么,为什么不在检索后对其进行排序(Noise Generator说了什么)?这是我为prefs制作的一个类。让我编辑它,感谢快速响应,我尝试了LinkedHashSet,但仍然得到未排序的列表。
<string-array name="quality_attributes">
<item>{id:1,name:Performance,sub:[{id:2,name:Scalability},{id:3,name:Response_Time}]}</item>
<item>{id:4,name:Security,sub:[{id:5,name:Availability,sub:[{id:6,name:Reliability},{id:7,name:Recovery}]},{id:8,name:Privacy}]}</item>
<item>{id:9,name:Interoperability}</item>
<item>{id:10,name:Maintainability}</item>
<item>{id:12,name:Testability}</item>
<item>{id:13,name:Usability,sub:[{id:14,name:Findability},{id:15,name:Correctness}]}</item>
</string-array>
String[] elementsArray = getResources().getStringArray(
R.array.quality_attributes);
for (int i = 0; i < attributesArray.length; i++) {
Gson gson = new Gson();
MyJsonObject obj = gson.fromJson(elementsArray[i],
MyJsonObject.class);
// Do something
}
// ...
Set<String> set = new LinkedHashSet<String>();
// insert from ArrayList
set.addAll(contact_names_list);
// or single elements
set.add("Homer");
set.add("Marge");
editor.putStringSet("CONTACT_LIST", set);