Set<String> 不保存所有数据?

Set<String> doesn't save all data?

我在使用 Set<String> 时遇到了一些问题,我不知道为什么 - 数据似乎没有完全插入到 data

这是我的代码:

private Set<String> spinnersPosToData() {
    Set<String> data = new HashSet<>();

    data.add(String.valueOf(CHURCH_SPINNER_POS));
    data.add(String.valueOf(MEMBER_BY_SPINNER_POS));
    data.add(String.valueOf(BIRTH_DAY_SPINNER_POS));
    data.add(String.valueOf(BIRTH_MONTH_SPINNER_POS));
    data.add(String.valueOf(GENDER_SPINNER_POS));
    data.add(String.valueOf(SALUATION_SPINNER_POS));
    data.add(String.valueOf(BIRTH_YEAR_RANGER_SPINNER_POS));
    data.add(String.valueOf(REGISTERED_TO_VOTE_SPINNER_POS));
    data.add(CELL_PHONE_TXT);

    Log.i("chu", String.valueOf(CHURCH_SPINNER_POS));
    Log.i("memBy", String.valueOf(MEMBER_BY_SPINNER_POS));
    Log.i("bDay", String.valueOf(BIRTH_DAY_SPINNER_POS));
    Log.i("bMon", String.valueOf(BIRTH_MONTH_SPINNER_POS));
    Log.i("gen", String.valueOf(GENDER_SPINNER_POS));
    Log.i("sal", String.valueOf(SALUATION_SPINNER_POS));
    Log.i("bYea", String.valueOf(BIRTH_YEAR_RANGER_SPINNER_POS));
    Log.i("reg2Vot", String.valueOf(REGISTERED_TO_VOTE_SPINNER_POS));
    Log.i("celPho", CELL_PHONE_TXT);

    Log.i("dat2Str", data.toString());

    return data;
}

这是我在日志中找到的内容:

04-07 14:28:22.388 7309-7309/app.com.mmm I/chu: 11
04-07 14:28:22.388 7309-7309/app.com.mmm I/memBy: 1
04-07 14:28:22.388 7309-7309/app.com.mmm I/bDay: 3
04-07 14:28:22.388 7309-7309/app.com.mmm I/bMon: 4
04-07 14:28:22.388 7309-7309/app.com.mmm I/gen: 2
04-07 14:28:22.388 7309-7309/app.com.mmm I/sal: 2
04-07 14:28:22.388 7309-7309/app.com.mmm I/bYea: 2
04-07 14:28:22.389 7309-7309/app.com.mmm I/reg2Vot: 1
04-07 14:28:22.389 7309-7309/app.com.mmm I/celPho: 123456789
04-07 14:28:22.389 7309-7309/app.com.mmm I/dat2Str: [4, 1, 11, 123456789, 3, 2]

如您所见,data 不完整,顺序随机。这是为什么?

Definition of Set:

A collection that contains no duplicate elements. More formally, sets contain no pair of elements e1 and e2 such that e1.equals(e2), and at most one null element. As implied by its name, this interface models the mathematical set abstraction.

Definition of HashSet:

This class implements the Set interface, backed by a hash table (actually a HashMap instance). It makes no guarantees as to the iteration order of the set; in particular, it does not guarantee that the order will remain constant over time. This class permits the null element.

如果您想保留重复值和插入顺序,请改用 ArrayList

As you see data isn't completly and is in a random order. Why is that?

这是预期的行为。 HashSet 是一个不保留其项目顺序且不包含重复项的集合。你可以阅读更多here

集合是不包含重复元素的集合。如您所见,您多次添加了一些值。此外 HashSet 不保持插入顺序。如果订单是进口的,您应该使用:LinkedHashSet 如果您需要所有元素,请使用 ArrayList