将<E>转换为String []会使元素的顺序错误

Log*_*ror 4 java

我有简单的POJO课程

public class Option {
    String optionText;

    public String getOptionText() {
        return optionText;
    }

    public void setOptionText(String optionText) {
        this.optionText = optionText;
    }

    @Override
    public String toString() {
        return optionText;
    }

}
Run Code Online (Sandbox Code Playgroud)

在那里我正在创建一个Set对象,并希望将该对象转换为String [],我的逻辑是

public class Main {
    Set<Option> options = new HashSet<Option>();
    public Main() {
        Option option1 = new Option();
        option1.setOptionText("Option 1");      
        options.add(option1);
        Option option2 = new Option();
        option2.setOptionText("Option 2");      
        options.add(option2);
        Option option3 = new Option();
        option3.setOptionText("Option 3");      
        options.add(option3);
        Option option4 = new Option();
        option4.setOptionText("Option 4");      
        options.add(option4);

        System.out.println("Set<Option> size is " + options.size());


        System.out.println(getCorrectAnswer(options, "a"));
    }

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


    public String getCorrectAnswer(Set<Option> options, String selectedOptionAsCorrect) {
        String answerString = null;
        String[] listOfOptions = new String[4];
        int i = 0;
        for (Option option : options) {
            listOfOptions[i] = option.getOptionText();
            System.out.println("At index " + i + " is " + option.getOptionText());
            i++;
        }
        if(selectedOptionAsCorrect.equals("a")){
            answerString = listOfOptions[0];
        }
        else if(selectedOptionAsCorrect.equals("b")){
            answerString = listOfOptions[1];
        }
        else if(selectedOptionAsCorrect.equals("c")){
            answerString = listOfOptions[2];
        }
        else if(selectedOptionAsCorrect.equals("d")){
            answerString = listOfOptions[3];
        }

        System.out.println("Answer is " + answerString);

        return answerString;        

    }

}
Run Code Online (Sandbox Code Playgroud)

在这一点上,我想把它放在控制台上

Set<Option> size is 4
At index 0 is Option 1
At index 1 is Option 2
At index 2 is Option 3
At index 3 is Option 4
Answer is Option 1
Option 1
Run Code Online (Sandbox Code Playgroud)

系指我加入Option 1,Option 2,Option 3,Option 4按顺序我要复制这些字符串为String []中相同的顺序

listOfOptions[0]contian Option 1
listOfOptions[1]应该contian Option 2
listOfOptions[2]应该contian Option 3
listOfOptions[3]应该contian contian Option 4

但我得到了输出

Set<Option> size is 4
At index 0 is Option 3
At index 1 is Option 1
At index 2 is Option 2
At index 3 is Option 4
Answer is Option 3
Option 3
Run Code Online (Sandbox Code Playgroud)

我想问为什么 listOfOptions[0]contian Option 3
应该包含Option 1,如何解决这个没有任何解决方案或幕后的逻辑可以任何人解释请.Ť

吨的感谢提前

And*_*lko 7

如果要按照添加元素的顺序获取元素,请使用LinkedHashSet<>实现而不是HashSet<>/ TreeSet<>.

Set<Option> options = new LinkedHashSet<>();
...
options.stream().forEach(System.out::println);
// prints all elements in the order which you'll expect
Run Code Online (Sandbox Code Playgroud)

阅读Oracle Tutorials的更多内容.我和Willy du Preez一起建议你看一下清单.在你的情况下,他们可能有一个存在的地方.