没有得到相同的 ArrayList 顺序

Posted

技术标签:

【中文标题】没有得到相同的 ArrayList 顺序【英文标题】:NOT getting same order of ArrayList 【发布时间】:2015-12-27 15:28:43 【问题描述】:

我将一个数组列表分配给另一个数组列表,并将其存储在 SharedPreferences 中。问题是从 SharedPreferences 获取数组列表时。 arraylist 的顺序不同,即存储在索引上的值在获取的 arraylist 中是不同的。

我正在使用以下代码进行存储: 在这里,我是qarrayoff arraylist 到list1。 在打印list1 的元素时,它的顺序与qarrayoff 中的顺序不同

ArrayList<String> list1 = new ArrayList<String>();
list1.addAll(qarrayoff);// fetch the data

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences.Editor edit = prefs.edit();
edit.putStringSet("SAVEDATA", new HashSet<String>(list1));
edit.commit();  

我想要相同的顺序,即两个数组列表中的相同元素序列。如何实现?

【问题讨论】:

不可能使用 HashSet 您不是在保存列表,而是在保存一个无序集,它是其值的副本。 我如何实现需要的?? 将数据保存为 JSON 字符串可能有效 JSON 数组听起来特别过分。我确信 API 中有一种机制可以处理这个问题。 【参考方案1】:

您可以将ArrayList 的内容转换为JSONArray,并将其保存在SharedPreference 中作为字符串。例如

 JSONArray jArray = new JSONArray(list1);
 edit.putString("SAVEDATA",jArray.toString());

但是您将不得不付出额外的努力,以便在检索 JSONArray 时对其进行解析。或者,您可以存储每个条目,使用其索引作为键,以及 ArrayList 的大小。这样,要重建ArrayList,您将不得不循环大小次,并使用循环的索引作为检索条目的键

【讨论】:

【参考方案2】:

解决问题的最简单方法是使用 TinyDB。它简化了在您的应用中使用 SharedPreferences。

那么你可以简单地做这样的事情,

TinyDB tinydb = new TinyDB(context);
tinydb.putListString("ListArray", mListArray);

那么你就可以用这个来获取数据了,

tinydb.getList("ListArray");

顺序将永远保持。

更新

为了消除您的困惑,android 中没有像 TinyDB 这样的东西。它只是一个围绕 SharedPreferences 的包装类,让您的生活更轻松。

您的数据将始终存储在 SharedPreferences 中,TinyDB 类只是一个实用程序类。因此,即使在您关闭或重新启动应用后,数据仍会存储在 SharedPreferences 中。

【讨论】:

列表是否仍存储在 tinydb 中?即使在关闭应用程序之后? 如果我重新启动我的应用程序,我可以从 tinydb 获取列表吗?

以上是关于没有得到相同的 ArrayList 顺序的主要内容,如果未能解决你的问题,请参考以下文章

获取Java中arrayList中重复值的计数而不影响arrayList的顺序[重复]

ArrayList 的 contains() 方法如何评估对象?

多元回归没有得到与 sklearn 相同的系数

顺序表的一些重要操作

对ArrayList中的Person对象按照先年龄从大到小,相同年龄的再按照姓名(姓名是英文的)的字母顺序进行排序.

java 两个arraylist放着相同的东西,但顺序不同,怎么判断两个是不是相等