繁体   English   中英

从HashSet转换为ArrayList时缺少订单

[英]Order missing while converting to ArrayList from HashSet

我正在将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;
}

提前致谢!

如@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();
    }

希望它能对您有所帮助:)

HashSet不会保留元素添加顺序。 首先,它计算应该保持恒定但难以预测的对象哈希码,然后使用它选择一个存储桶,该存储桶是已选择了相同存储桶的对象列表。 由于Iterator仅遍历所有存储桶,因此迭代顺序在很大程度上是不可预测的。

如果需要保留订单,请改用LinkedHashSet 但是, LinkedHashSet维护其他链接列表,因此需要更多资源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM