我有一个排序ArrayList
的联系人。我想将列表存储在SharedPreference
中。我尝试了下面的代码:
SharedPreferences.Editor editor = app_preference.edit();
Set<String> set = new HashSet<String>();
set.addAll(contact_names_list);
editor.putStringSet("CONTACT_LIST", set);
editor.apply();
问题是,当我从HashSet
中检索它时,我得到了一个未排序的列表。除了Hashset
,还有其他存储ArrayList
的方法吗?
6条答案
按热度按时间pbpqsu0x1#
检索值
cgyqldqp2#
这样做-:
使用以下代码检索值:
xggvc2p63#
由于
putStringSet
接受任何实现Set
接口的类,因此您可以使用保留插入顺序的LinkedHashSet
。LinkedHashSet文件:
这个实现与HashSet的不同之处在于,它维护了一个贯穿其所有条目的双向链表。这个链表定义了迭代顺序,即元素插入集合的顺序(插入顺序)。
HashSet
不保留插入顺序,这是这里的问题。3wabscal4#
保存array到SharedPreferences:
从SharedPreferences加载数组
yxyvkwin5#
正如Android文档解释的那样,https://developer.android.com/training/data-storage/shared-preferences.html?hl=en共享首选项是一种保存键值数据的方法。考虑到在后台,字典可以以几乎随机的顺序保存,您无法按顺序检索某些内容。我可以推荐几个解决方案:
1.**简单但性能不好的一个:**将索引作为值的一部分添加,因此您可以创建一个具有Hashset大小的数组,然后迭代Hashset并将每个元素添加到您创建的数组中。时间复杂度O(N)加上文件的阅读过程所涉及的时间复杂度。
1.**将数据保存在本地SQLite数据库中:**此解决方案在未来更加灵活(您可以添加新联系人)。https://developer.android.com/training/data-storage/sqlite.html通常你创建你自己的SQLite数据库,你把它放在资产中,然后你只需要导入它。您可以创建查询,以便按照所需的顺序排列它们(可能为此创建一个列)。
1.**简单的不可扩展选项:**在值
folder
中,您始终可以创建一个strings.xml
文件,您可以将该数据作为string-array
放置。https://developer.android.com/guide/topics/resources/string-resource.html?hl=en<string-array name="types"> <item>A</item> <item>B and users</item> <item>C</item> <item>D</item> <item>E</item> </string-array>
如果你需要一些更结构化的东西,我已经做了这样的东西(保存为JSON)。
在我的代码中:
一般来说,如果你想改变一些东西,第二个选择是最好的。如果你正在寻找一些简单的东西,第三个选择就足够了。
ijxebb2r6#
我们可以使用Java 8的排序方式对集合进行排序。
Set<String> s = new HashSet<String>(); s.add("Kunal"); s.add("Bhism"); s.add("Work"); s.add("Abdgg"); s.add("Psss"); s.add("Work"); List<Object> l = s.stream().sorted().collect(Collectors.toList()); System.out.println(l);
尝试上面的代码,你现在会得到排序的HashSet。