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