如何比较Hashmap中的2个arraylists?

时间:2012-06-11 02:24:37

标签: java android arraylist hashmap

我有一个名为fetchContactName()的arraylist,它返回我的联系人列表中的所有名称(31),一个名为fetchContactNumbers()的arraylist,它返回与fetchContactName()相关联的所有电话号码(31),以及一个名为newList的arraylist,其中包含向我发送短信的所有数字(6)。

我试图通过查找newList中的相同数字来更改fetchContactNumbers()中的电话号码。当匹配时,我会在fetchContactNumbers()中索引位置并使用该索引在fetchContactName()中的同一位置获取名称。从那里开始,我会根据索引位置将newList中的数字替换为fetchContactName()中的名称。

这是我做的一个例子,如上所述:

http://pastebin.com/pApHNkXa

上述示例的问题在于,当我将其应用于listview时,列表中只有一个元素更改为名称。更奇怪的是,newList.get(3)是唯一一个改名为名字的人。位置newList不是0, 1, 2, 4 and 5

其他人建议,我如何使用HashMap给出与上面给出的例子相同的预期结果?有人告诉我在fetchContactNumbers()中使用fetchContactNames()Hashmap,然后使用HashMapnewList进行比较,但我无法找到任何来源来实现此目的。

更新

这是我的HashMap的工作代码,但结果仍然与上面相同:

    for (String str : fetchContactNames()) {
        contactNameNew += str + " ";
    }
    for (String str2 : fetchContactNumbers()) {
        contactNumberNew += str2 + " ";
    }

    //String to split
    String temp[];
    String temp2[];
    String delimiter = " ";

    temp = contactNameNew.split(delimiter);
    temp2 = contactNumberNew.split(delimiter);

    HashMap<String, String> contacts = new HashMap<String, String>();
    contacts.put(contactNameNew, contactNumberNew);
    for(int i = 0; i < fetchContactNames().size(); i++){
        contacts.put(temp[i], temp2[i]);
    }

    Iterator<Entry<String, String>> iterator = contacts.entrySet().iterator();

    while(iterator.hasNext()){

        Entry<String, String> entry = iterator.next();
        int position = getPosition(newlist, entry.getValue());
    if (newlist.contains(entry.getValue())) {

        newlist.set(position, entry.getKey());
        }
    }

2 个答案:

答案 0 :(得分:1)

你的代码正在工作,你放在这里http://pastebin.com/pApHNkXa我在android中尝试过它的工作正常它输出为五,二,七,三。

答案 1 :(得分:0)

我认为如果我更改你的代码并回答它会更好......

import java.util.ArrayList;
import java.util.HashMap;

public class StringT {


public static void main(String[] args) {

    // alpha would represent fetchContactNames()
    ArrayList<String> alpha = new ArrayList<String>();
    // bravo would represent fetchContactNumbers()
    HashMap<String, String> bravo = new HashMap<String, String>();
    // charlie would represent newList
    ArrayList<String> charlie = new ArrayList<String>();

    bravo.put("1", "One"); charlie.add("5");
    bravo.put("2", "Two"); charlie.add("1");
    bravo.put("3", "Three"); charlie.add("3");
    bravo.put("4", "Four"); charlie.add("4");
    bravo.put("5", "Five"); charlie.add("2");

    // this will print charlie just as you see above
    for(int i = 0; i < charlie.size(); i ++){
        System.out.println(charlie.get(i));
    }

    System.out.println("---------------------");

    // this will print charlie with the numbers replaced as names
    for(int i = 0; i < charlie.size(); i++){
        String value;
        if((value = bravo.get(charlie.get(i))) != null){
            charlie.set(i, value);
        }
    }

    for(int i = 0; i < charlie.size(); i ++){
        System.out.println(charlie.get(i));
    }
}
}