设置<string>不保存所有数据?

时间:2016-04-07 12:35:01

标签: java android android-studio dataset

我遇到了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未完成且按随机顺序排列。那是为什么?

3 个答案:

答案 0 :(得分:2)

<强> Definition of Set

  

不包含重复元素的集合。更正式地说,集合不包含元素对e1和e2,使得e1.equals(e2)和至多一个null元素。正如其名称所暗示的,该界面对数学集抽象进行建模。

<强> Definition of HashSet

  

此类实现Set接口,由哈希表(实际上是HashMap实例)支持。它不能保证集合的迭代顺序;特别是,它不保证订单会随着时间的推移保持不变。该类允许null元素。

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

答案 1 :(得分:1)

  

如您所见,数据并非完整且按随机顺序排列。那是为什么?

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

答案 2 :(得分:0)

集合是一个不包含重复元素的集合。如您所见,您正在多次添加一些值。 HashSet也没有保持插入顺序。如果订单是导入的,您应该使用:LinkedHashSet如果您需要使用ArrayList

所有元素