2016-04-07 2 views
0

У меня возникли проблемы с Set<String>, и я не знаю почему - кажется, что данные не были вставлены полностью в data.<String> не сохраняет все данные?

Это мой код:

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 не является полным и в случайном порядке. Почему это?

ответ

2

Definition of Set:

Коллекция, не содержит повторяющихся элементов. Более формально множества не содержат пары элементов e1 и e2 таких, что e1.equals (e2) и не более одного нулевого элемента. Как видно из его названия, этот интерфейс моделирует математическую абстрактную абстракцию.

Definition of HashSet:

Этот класс реализует интерфейс Set, поддержанный хэш-таблицей (фактически экземпляр HashMap). Он не дает никаких гарантий относительно итерационного порядка набора; в частности, он не гарантирует, что порядок будет оставаться постоянным с течением времени. Этот класс допускает нулевой элемент.

Если вы хотите сохранить повторяющиеся значения и порядок вставки, используйте ArrayList вместо этого.

+0

KK, я видел минуту назад, что мои ценности не дублируются: P Но я хочу сохранить его в 'SharedPreferences', как я могу это сделать Это? – y07k2

+1

отметьте [this] (http://stackoverflow.com/a/7057858/4605725) сообщение о том, как сериализовать ArrayList и сохранить его в SharedPreferences, хотя я бы рекомендовал сохранять нетривиальные данные в базу данных или хотя бы файл , –

1

Как вы видите, данные не полностью и находятся в случайном порядке. Почему это?

Это ожидаемое поведение. HashSet - это коллекция, которая не хранит порядок своих элементов и не содержит дубликатов. Вы можете прочитать больше here

+1

@AndyTurner – Blackbelt

0

Набор представляет собой набор, который не содержит повторяющихся элементов. Как вы видите, вы добавляете несколько значений несколько раз. Также HashSet не поддерживает порядок вставки. Если заказ импортируется, вы должны использовать: LinkedHashSet Если вам нужны все элементы, используйте ArrayList

+0

Но я хочу сохранить его в 'SharedPreferences', как я могу это сделать? – y07k2

Смежные вопросы