开发中遇到关于保存数据的问题,之前保存的都是int string等类型的数据,是没有问题的,现在遇到需要保存字符串数组,就采用SharedPreferences的保存Set<String>类型数据的功能。
其中Set<String>部分用的是它的子类TreeSet<String>(),可以指定存储顺序,设定的是按添加顺序存储,这些都没有问题。运行程序,保存数据,然后获取都是对的,顺序也是对的,但是退出程序,重新进入程序,发现获取的字符串数组顺序是错的。比如说,
保存的顺序是 A B C
获取的顺序是 A B C
退出重新进入程序获取的顺序是 B C A
而且此时查看对应的xml文件,退出程序前 顺序是对的,重新进入程序是错的
我想请问一下如何确保其顺序是对的 ???
我猜,会不会是使用时,用的是treeset,然后系统保存的时候,自动降机为set了。就成没顺序的了。
你所谓的保存顺序是指添加顺序?
TreeSet<T>内部排序顺序由T所实现的Comparable接口决定
看了下源码 发现SharedPreferences在读取配置xml文件时,碰到节点为“set”,即放入的stringSet对象,默认是生成一个HashSet对象进行保存的,即不管在保存的时候你是使用TreeSet还是HashSet,当你读取的时候都是获取到HashSet对象。