Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Java枚举没有';是否按顺序返回属性列表?_Java - Fatal编程技术网

为什么Java枚举没有';是否按顺序返回属性列表?

为什么Java枚举没有';是否按顺序返回属性列表?,java,Java,我正在创建一个可以更改语言的简单程序,并将文件myBundle.properties中的属性列表转换为字符串数组 这是文件myBundle.properties: #default test1=Hello1 test2=Hello2 test3=Hello3 test4=Hello4 test5=Hello5 test6=Hello6 这是Java代码: import java.util.*; class BundleTest { BundleTest() {

我正在创建一个可以更改语言的简单程序,并将文件myBundle.properties中的属性列表转换为字符串数组

这是文件myBundle.properties:

 #default
 test1=Hello1
 test2=Hello2
 test3=Hello3
 test4=Hello4
 test5=Hello5
 test6=Hello6
这是Java代码:

import java.util.*;

class BundleTest {

    BundleTest() {
        String[] s = returnStringArray(Locale.ENGLISH);
        for(int i=0; i<s.length; i++) {
            System.out.println(s[i]);
        }
    }

    private String[] returnStringArray(Locale language) {
        try {
            ResourceBundle labels = ResourceBundle.getBundle("myBundle", language);
            Enumeration<String> keys = labels.getKeys();
            Vector v = new Vector();
            String key = null;
            while (keys.hasMoreElements()) {
                v.add(keys.nextElement());
            }
            String[] s = new String[v.size()];
            for(int i=0; i<s.length; i++) {
                s[i] = (String)v.elementAt(i);
            }
            return s;
        } catch (MissingResourceException mre) {
            System.out.println("Risorse della lingua non trovate!");
            return null;
        }
    }

    public static void main(String[] args) {
        new BundleTest();
    }
}

我不知道ResourceBundle类的确切细节,但是当查看您的代码示例时,它似乎有键/值对

这表明它将其内容存储在一个数据库中。(同样,我不知道ResourceBundle,这是一种预感)
HashMap键(和值)是无序的,因为它们的存储方式可以很容易地找到给定键的值。

有两个地方我不会采用顺序。
1.从向量和 2.labels.getKeys()


在未由集合实例化的枚举上尝试此操作。

最有可能的情况是,您将返回一个,它在内部使用一个作为存储。哈希映射没有排序

这是因为ResourceBundle应该用于按键检索值,而不是基于原始属性文件按排序顺序枚举。

Se如果替换

Enumeration<String> keys = labels.getKeys();
Enumeration keys=labels.getKeys();

List keys=Collections.List(labels.getKeys());
集合。排序(键);

帮助

顺便说一句,我认为Vector已经被弃用了。查看Vector的javadoc将为您指出支持的替代方案。(很抱歉回避这个问题。)它在哪里说
ResourceBundle.getKeys()
返回有序枚举?Thsi与
枚举
无关,但其背后的源可能是一个
集合
,因此不保留任何顺序。事实上,HashMap不是根据其哈希键放置添加的元素吗?我认为目标是按它们在属性文件中的顺序排序,而不是按“自然”排序键的顺序。其顺序与所提供示例中的相同。
Enumeration<String> keys = labels.getKeys();
List<String> keys =  Collections.list( labels.getKeys() );
Collections.sort(keys);