我们通常会使用 Properties
去读取 properties
文件的内容,但 Properties
的问题是无法按照 properties
文件的顺序去读取。因为 Properties
继承自Hashtable
,是一个基于哈希表的数据结构,元素的存储位置是通过元素的键的哈希值计算出来的,而不是按照元素插入的顺序。因此,当你遍历哈希表的元素时,元素的顺序通常会看起来是随机的,这取决于元素键的哈希值。
如果需要一个能保持插入顺序的键值对集合,可以使用LinkedHashMap
(LinkedHashMap
在内部使用一个双向链表来记录元素的插入顺序,可以保持元素的插入顺序):
/*** @author dongguabai* @date 2024-01-30 09:42*/
public class LinkedProperties extends Properties {private final LinkedList<Object> keys = new LinkedList<>();public Enumeration<Object> keys() {return Collections.enumeration(keys);}public Object put(Object key, Object value) {keys.add(key);return super.put(key, value);}@Overridepublic Set<String> stringPropertyNames() {Set<String> names = new LinkedHashSet<>();for (Object key : keys) {names.add((String) key);}return names;}
}