我们通常会使用 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;}
}