呼叫之间的地图/收集顺序是否稳定?

Joh*_*ohn 4 java iteration collections

如果我有一个哈希映射并重复遍历这些对象,那么我是否保证每次调用的顺序都相同?例如,以下打印两行彼此不同:

Map<String,Integer> map = new HashMap<String,Integer>()
  {{ put("a", 1); put("b", 2); put("c", 3); }};
System.out.println(map);
System.out.println(map);
Run Code Online (Sandbox Code Playgroud)

这是集合和集合的一般情况吗?如果是这样,如果你必须以相同的顺序在同一个集合上迭代两次(不管是什么顺序),最好的方法是什么?我想转换成一个列表.

Mic*_*rdt 7

合同MapSet不对迭代顺序做出任何保证,但是SortedSetSortedMap(由TreeMap和实现TreeSet)的合同.

此外,即使未排序的实现通常也具有确定性,并且对于每个特定实例具有可重复的迭代顺序,只要它不以任何方式进行修改即可.但是,这是一个实现细节,不应该依赖.