Java 如何按输入顺序保存和检索共享首选项中的数据?
在java中,如何按输入顺序保存和检索共享首选项中的数据 当我在共享首选项中保存此类数据时Java 如何按输入顺序保存和检索共享首选项中的数据?,java,android,hashmap,sharedpreferences,Java,Android,Hashmap,Sharedpreferences,在java中,如何按输入顺序保存和检索共享首选项中的数据 当我在共享首选项中保存此类数据时 HashMap<Integer, String> likes = new HashMap<Integer, String>(); // THIS IS INPUT ORDER likes.put(1,"a") likes.put(2,"b") likes.put(3,"c") likes.put(4,"d") edito
HashMap<Integer, String> likes = new HashMap<Integer, String>();
// THIS IS INPUT ORDER
likes.put(1,"a")
likes.put(2,"b")
likes.put(3,"c")
likes.put(4,"d")
editor = getSharedPreferences("PREFS_NAM", 0).edit();
for (Map.Entry<Integer, String> entry : likes.entrySet())
editor.putString(String.valueOf((entry.getKey())),
entry.getValue());
editor.apply();
看起来像
(1,"a")
(2,"b")
(4,"d")
(3,"c")
哪个输入顺序不一样 试试下面的方法
Map likes=newlinkedhashmap;
LinkedHashMap的设计目的是按键、值和条目的顺序保存它们。SharedReferences是为存储和检索简单数据而设计的,即使在稍微复杂的结构中使用它们也是相当尴尬的
您似乎正在尝试存储和检索映射,并且希望迭代顺序为插入顺序。首先,您应该使用LinkedHashMap而不是普通的HashMap,因为后者不能保证迭代顺序
Map<Integer, String> likes = new LinkedHashMap<>();
然后检索:
Map<Integer, String> likes = new LinkedHashMap<>();
Map<String, ?> all = prefs.getAll();
for (int i = 0; i < all.size() / 2; i++)
likes.put((Integer) all.get("K" + i), (String) all.get("V" + i));
这显然很可怕,SharedReferences并不是为此而设计的,但它确实有效。这是关于HashMaps还是SharedReferences的问题?HashMap没有排序,如果有问题,请更改集合类型…@PaulBoddington我已经修改过it@Dreamer我看见了。它仍然有点困惑,我认为你的put语句的键和值的方式是错误的,但是你要做的是明确的。你想要键的插入顺序还是数字顺序?键有时会按1、3、4、2这样的顺序进入映射吗?问题是从共享首选项hashmap而不是从hashmap检索数据时,如何将共享首选项转换为LinkedHashMap?这就是问题所在!我会尝试一下,给你答案,但我有钥匙,他们从1开始到400这不会使独特keys@Dreamer固定的无法定义get-in-likes.putInteger i.getK+i、字符串i.getV+i;SharedReferences中还有其他内容吗?没有,我有一个数组,其中包含值和这些值的序列。例如WWEW、DSD、SDSDS。序列是唯一的,我用作从字符串数组的1开始到结尾的键,字符串的值作为值
int index = 0;
for (Map.Entry<Integer, String> e : likes.entrySet()) {
editor.putInt("K" + index, e.getKey());;
editor.putString("V" + index, e.getValue());
index++;
}
Map<Integer, String> likes = new LinkedHashMap<>();
Map<String, ?> all = prefs.getAll();
for (int i = 0; i < all.size() / 2; i++)
likes.put((Integer) all.get("K" + i), (String) all.get("V" + i));