我正在努力将ArrayList
转换为HashSet
,然后HashSet
转换为ArrayList.
它的工作正常。我在订单中通过了ArrayList
。但我得到的结果是不同的顺序。
怎么解决这个?
public void saveAlbumList(ArrayList<String> values) {
Set<String> set = new HashSet<String>(values);
pref_selected_photos.edit().putStringSet("AlbumList", set).commit();
}
public ArrayList<String> getAlbumList() {
ArrayList<String> pathList = new ArrayList<String>();
try {
Set<String> set = pref_selected_photos.getStringSet("AlbumList",
null);
if (set != null && set.size() > 0) {
pathList = new ArrayList<String>(set);
}
} catch (Exception e) {
e.printStackTrace();
}
return pathList;
}
提前致谢!
答案 0 :(得分:3)
正如@dreamCoder所提到你需要使用LinkedHashSet
不要直接将值分配给
LinkedHashSet
。迭代ArrayList
并添加
更改方法代码:
public void saveAlbumList(ArrayList<String> values) {
Set<String> set = new LinkedHashSet();
for(String name : values){
set.add(name);
}
pref_selected_photos.edit().putStringSet("AlbumList", set).commit();
}
希望它会对你有所帮助:)。
答案 1 :(得分:2)
HashSet
不保留元素添加顺序。首先,它计算应该保持不变但很难预测的对象哈希码,然后使用它来选择一个桶,该桶是已选择相同桶的对象列表。由于Iterator
只是迭代所有桶,迭代顺序在很大程度上是不可预测的。
如果您需要保留订单,请使用LinkedHashSet。但是LinkedHashSet
维护了一个额外的链表,因此需要更多资源。