Почему мой массив меняет данные только в одном элементе?

У меня есть 3 массива. Конечная цель – изменить все телефонные номера в списке на имена контактов.

fetchContactNumbers() возвращает список всех телефонных номеров (31) на моем устройстве.

fetchContactNames() возвращает список всех имен контактов (31) на моем устройстве.

newList содержит 6 телефонных номеров.

Что я делаю, так это меняю числа в newList на соответствующие имена в fetchContactNames() в соответствии с позицией fetchContactNumbers(). Таким образом, поскольку элементы fetchContactNumbers() и fetchContactNames() расположены в правильном порядке, newList будет искать совпадение в fetchContactNumbers(), индексировать эту позицию, а затем использовать эту позицию в fetchContactnames(), чтобы установить число в newList в его репрезентативное имя. Вот пример, который я сделал, чтобы проверить более четкое изображение:

Пример для тестирования в качестве консольного приложения: http://pastebin.com/pApHNkXa

Вот код в моей деятельности:

    // change displayed numbers into contact names
    for(int i = 0; i < newList.size(); i++){
        int index = fetchContactNumbers().indexOf(newList.get(i));
        if(fetchContactNumbers().contains(newList.get(i))){

            newList.set(i, this.fetchContactNames().get(index));
        }
    }

Оттуда newList передается в мой класс CustomAdapter для заполнения моего списка.

Проблема с приведенным выше кодом (который является правильным на основе моего примера) заключается в том, что когда я запускаю его в своем приложении, только newList.get(3) меняется на свое правильное имя.

Кто-нибудь знает, почему меняется только одно имя, а не все? Я проверил logcat, и он показывает то же самое без ошибок.


person Community    schedule 10.06.2012    source источник
comment
Вы не думали об использовании HashMap для этой цели? Когда у вас есть два массива чисел и имен, ваш HashMap кажется гораздо лучшим подходом, HashMap<Name, Number>   -  person Simon Dorociak    schedule 11.06.2012
comment
@ hawaii.five-0 как мне этого добиться?   -  person    schedule 11.06.2012
comment
просто создайте HasMap с именами и числами, имя будет ключом и числовым значением, и это будет эффективнее и проще.   -  person Simon Dorociak    schedule 11.06.2012
comment
@ hawaii.five-0 у вас есть учебник, как это сделать? Я искал, но не могу найти ничего, связанного с моей ситуацией.   -  person    schedule 11.06.2012


Ответы (1)


Вы можете построить карту следующим образом. Используйте TreeMap вместо HashMap, если сортировка по алфавиту важнее эффективности.

    Map<String,String> contacts = new HashMap<String,String>;
    List<String> numbers = fetchContactNumbers();
    List<String> names = fetchContactNames();

    for(int i = 0; i < numbers.size(); i++)
    {
        contacts.put(numbers.get(i),names.get(i));
    }

Убедитесь, что вы также импортировали HashMap и Map

import java.util.HashMap;

import java.util.Map;

Затем просто перепишите свой CustomAdapter, чтобы он работал с HashMap. Вот несколько примеров использования HashMap

person shazeline    schedule 08.08.2012