Java 如何比较Hashmap中的2个ArrayList?

Java 如何比较Hashmap中的2个ArrayList?,java,android,arraylist,hashmap,Java,Android,Arraylist,Hashmap,我有一个名为fetchContactName()的数组列表,它返回我的联系人列表中的所有姓名(31);一个名为fetchContactNumbers()的数组列表,它返回与fetchContactName()关联的所有电话号码(31),还有一个名为newList的数组列表,其中包含发送给我短信的所有号码(6) 我试图通过在fetchContactNumbers()中查找相同的号码来更改newList中的电话号码。当有匹配项时,我会在fetchContactNumbers()中索引该位置,并使用该

我有一个名为
fetchContactName()
的数组列表,它返回我的联系人列表中的所有姓名(31);一个名为
fetchContactNumbers()
的数组列表,它返回与
fetchContactName()
关联的所有电话号码(31),还有一个名为
newList
的数组列表,其中包含发送给我短信的所有号码(6)

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

这是我制作的一个示例,其执行如上所述:

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

根据其他人的建议,我如何使用
HashMap
给出与上述示例相同的预期结果?我被告知在
Hashmap
中使用
fetchContactNumbers()
fetchContactNames()
,然后使用
Hashmap
newList
进行比较,但我找不到任何源代码来实现这一点

更新:

下面是我的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());
        }
    }
for(字符串str:fetchContactNames()){
contactNameNew+=str+“”;
}
for(字符串str2:fetchContactNumber()){
contactNumberNew+=str2+“”;
}
//要拆分的字符串
字符串温度[];
字符串temp2[];
字符串分隔符=”;
temp=contactNameNew.split(分隔符);
temp2=联系人号码新拆分(分隔符);
HashMap contacts=新的HashMap();
contacts.put(contactnamew,contactNumberNew);
对于(int i=0;i
我想如果我更改您的代码并回答您的问题会更好

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));
    }
}
}
import java.util.ArrayList;
导入java.util.HashMap;
公共类StringT{
公共静态void main(字符串[]args){
//alpha将表示fetchContactNames()
ArrayList alpha=新的ArrayList();
//bravo将代表FetchContactNumber()
HashMap bravo=新的HashMap();
//查理将代表新名单
ArrayList charlie=新的ArrayList();
太好了,放1,查理,加5;
太好了,放两个,查理,加上一个;
太棒了,放三个,查理加三个;
太棒了,放四个,查理加四个;
太好了,放五个,查理加上两个;
//这将打印charlie,正如上面所示
对于(int i=0;i
你的代码正在工作,你放在这里,我在android上试用过,它工作正常,输出为五、二、七、三。

我不知道如何在我的代码中实现这一点。我有2个用于hashmap的arraylist,有人告诉我应该将它们转换为字符串,然后将其与我的newList arraylist进行比较。我修改了您的代码并替换了它。此外,我选择数字作为“键”,以便您在根据数字进行搜索时快速访问。如果你想搜索一个人的名字,并得到他的联系电话号码,那么这个名字是一个更好的“钥匙”。希望有帮助!另外,如果“listView”与您的文章相关,您能否告诉我更多关于“listView”的含义……您的“if”陈述不正确,如果您没有使用listView,那么将很难理解这个问题。我遇到的问题是,六个名字中只有一个改变了。代码似乎只是在检查一件事,然后停止。嗯……据我所知,你的问题是,“如果”是正确的……也会产生与粘贴代码相同的输出。。无论如何,listView的问题可能是它没有更新..[link]可能会有所帮助,因为我主要使用iOS列表,而问题通常是刷新..出于某种原因,它在我的listView中不起作用。我正在创建一个模仿短信收件箱的应用程序。现在,它在我的手机上显示联系人的电话号码,但我试图用实际的联系人姓名替换它们。我不知道为什么,但它只是没有正确地为我工作,没有错误。