Java 如何比较两个arraylist<;联系人>;在爪哇

Java 如何比较两个arraylist<;联系人>;在爪哇,java,arraylist,Java,Arraylist,我正在比较两个arraylist(Contacts.java是一个pojo类)。第一个Arraylist包含一些项,第二个Arraylist包含一些项。通过比较两个列表,若两个列表包含相同的元素,则不应将其添加到第一个列表中,否则应将其添加到第一个列表中。但我做不到。下面是我的代码。我们将不胜感激 public void insertmanualandxmldata() { mContacts = storage.getarraylist(); // Arraylist if(m

我正在比较两个arraylist(Contacts.java是一个pojo类)。第一个Arraylist包含一些项,第二个Arraylist包含一些项。通过比较两个列表,若两个列表包含相同的元素,则不应将其添加到第一个列表中,否则应将其添加到第一个列表中。但我做不到。下面是我的代码。我们将不胜感激

public void insertmanualandxmldata()
{
    mContacts = storage.getarraylist(); // Arraylist
    if(mContacts != null)
    {
        for(int i=0; i<mContacts.size(); i++)
        {
            ContactVO mShareddata = mContacts.get(i);
            //mParsedDataSetList arraylist
            for(int j=0; j<mParsedDataSetList.size(); j++)
            {
                ContactVO mXmldata = mParsedDataSetList.get(j);
                if(mShareddata.getNumber().contains(mXmldata.getNumber()))
                {
                    mContacts.add(mXmldata);
                }
            }
        }
        storage.savearraylist(mContacts);
    }
    else
    {
        storage.savearraylist(mParsedDataSetList);
    }
}
public void insertmanualandxmldata()
{
mContacts=storage.getarraylist();//Arraylist
if(mContacts!=null)
{

对于(int i=0;i您可以实现一个扩展ArrayList的类,并创建一个比较器,如下所示:

public static Comparator<T> Comp = new Comparator<T>(){
    public int compare(Type e1, Type e2){
        return (e1.getSomething().compareTo(e2.getSomething()));
    }
};
公共静态比较器Comp=新比较器(){
公共整数比较(e1型,e2型){
return(e1.getSomething().compareTo(e2.getSomething());
}
};
如果您以前从未使用过比较器,那么这里是一个很好的教程


比较器的基本功能是提供比较元素的标准。

您可以实现一个扩展ArrayList的类,并创建一个比较器,如下所示:

public static Comparator<T> Comp = new Comparator<T>(){
    public int compare(Type e1, Type e2){
        return (e1.getSomething().compareTo(e2.getSomething()));
    }
};
公共静态比较器Comp=新比较器(){
公共整数比较(e1型,e2型){
return(e1.getSomething().compareTo(e2.getSomething());
}
};
如果您以前从未使用过比较器,那么这里是一个很好的教程


比较器基本上是提供一个比较元素的标准。

这里的
联系人列表1
联系人列表2
是您的两个POJO类
联系人列表

Set<Contacts> contactList3 = new HashSet<Contacts>(contactList1);

contactList3.addAll(contactList2);
ArrayList<Contacts> newList = new ArrayList<Contacts>(contactList3);

System.out.println("New List :"+newList);
Set contactList3=新哈希集(contactList1);
contactList3.addAll(contactList2);
ArrayList newList=新的ArrayList(contactList3);
System.out.println(“新列表:+newList”);

这里的
联系人列表1
联系人列表2
是您的两个POJO类
联系人列表

Set<Contacts> contactList3 = new HashSet<Contacts>(contactList1);

contactList3.addAll(contactList2);
ArrayList<Contacts> newList = new ArrayList<Contacts>(contactList3);

System.out.println("New List :"+newList);
Set contactList3=新哈希集(contactList1);
contactList3.addAll(contactList2);
ArrayList newList=新的ArrayList(contactList3);
System.out.println(“新列表:+newList”);
  • 实施可比

    private class ContactsVO implements Comparable<ContactsVO>{
    
    int number;
    
    @Override
    public int compareTo(ContactsVO that)
    {
        if (this.number> that.number)
            return 1;
        else if (this.number< that.number)
            return -1;
        else
            return 0;
    
    }
    
    }
    
    私有类ContactsVO实现了可比较的{
    整数;
    @凌驾
    公共国际比较(联系该公司)
    {
    如果(这个.number>那个.number)
    返回1;
    else if(这个数字<那个数字)
    返回-1;
    其他的
    返回0;
    }
    }
    
  • 和您的逻辑..将列表2的内容添加到列表1。添加时,我们必须比较列表1是否已经有该项

           for(int j=0; j < mParsedDataSetList.size(); j++)
            {
                ContactVO mXmldata = mParsedDataSetList.get(j);
                boolean exists = false;
    
                for(int i=0; i< mContacts.size(); i++)
                {
                    ContactVO mShareddata = mContacts.get(i);
    
                    if(mShareddata.comprareTo(mXmldata) == 0)
                    {
                       exists = true;
                       break; 
                    }
                }
                if(!exists)
                {
                    mContacts.add(mXmldata);
                }
            }
    
    for(int j=0;j
  • 实施可比

    private class ContactsVO implements Comparable<ContactsVO>{
    
    int number;
    
    @Override
    public int compareTo(ContactsVO that)
    {
        if (this.number> that.number)
            return 1;
        else if (this.number< that.number)
            return -1;
        else
            return 0;
    
    }
    
    }
    
    私有类ContactsVO实现了可比较的{
    整数;
    @凌驾
    公共国际比较(联系该公司)
    {
    如果(这个.number>那个.number)
    返回1;
    else if(这个数字<那个数字)
    返回-1;
    其他的
    返回0;
    }
    }
    
  • 和您的逻辑..将列表2的内容添加到列表1。添加时,我们必须比较列表1是否已经有该项

           for(int j=0; j < mParsedDataSetList.size(); j++)
            {
                ContactVO mXmldata = mParsedDataSetList.get(j);
                boolean exists = false;
    
                for(int i=0; i< mContacts.size(); i++)
                {
                    ContactVO mShareddata = mContacts.get(i);
    
                    if(mShareddata.comprareTo(mXmldata) == 0)
                    {
                       exists = true;
                       break; 
                    }
                }
                if(!exists)
                {
                    mContacts.add(mXmldata);
                }
            }
    
    for(int j=0;j
    尝试使用不允许重复的LinkedHashSet:

    ArrayList arrayList1 = new ArrayList();
    ArrayList arrayList2 = new ArrayList();
    
    ArrayList arrayList3 = new ArrayList();
    arrayList3.addAll(arrayList1);
    arrayList3.addAll(arrayList2);
    
    HashSet hashSet = new HashSet();
    hashSet.addAll(arrayList3);
    arrayList3.clear();
    arrayList3.addAll(hashSet);
    

    注意:当您需要维护列表项的顺序时,请使用LinkedHashSet而不是HashSet。

    尝试使用LinkedHashSet,它不允许重复:

    ArrayList arrayList1 = new ArrayList();
    ArrayList arrayList2 = new ArrayList();
    
    ArrayList arrayList3 = new ArrayList();
    arrayList3.addAll(arrayList1);
    arrayList3.addAll(arrayList2);
    
    HashSet hashSet = new HashSet();
    hashSet.addAll(arrayList3);
    arrayList3.clear();
    arrayList3.addAll(hashSet);
    

    注意:当您需要维护列表项的顺序时,请使用LinkedHashSet而不是HashSet。

    通过实现comparator或comparable有两种方法。
    根据您的要求,我建议您可以
    在ContactVO类中实现Comparable
    ,并
    覆盖compareTo方法

    private class ContactsVO implements Comparable<ContactsVO> {
    
        private Integer number;
    
        // Remaining attributes and their getter setter.
    
        public Integer getNumber() {
            return number;
        }
    
        public void setNumber(Integer number) {
            this.number = number;
        }
    
        @Override
        public int compareTo(ContactsVO compareWith) {
            if (this.getNumber() > compareWith.getNumber())
                return 1;
            else if (this.getNumber() < compareWith.getNumber())
                return -1;
            else
                return 0;
        }
    }
    

    注:一些基本数据类型,如整数、字符串实现可比。

    有两种方法通过实现comparator或Comparable实现。
    根据您的要求,我建议您可以
    在ContactVO类中实现Comparable
    ,并
    覆盖compareTo方法

    private class ContactsVO implements Comparable<ContactsVO> {
    
        private Integer number;
    
        // Remaining attributes and their getter setter.
    
        public Integer getNumber() {
            return number;
        }
    
        public void setNumber(Integer number) {
            this.number = number;
        }
    
        @Override
        public int compareTo(ContactsVO compareWith) {
            if (this.getNumber() > compareWith.getNumber())
                return 1;
            else if (this.getNumber() < compareWith.getNumber())
                return -1;
            else
                return 0;
        }
    }
    

    注意:Integer、String等一些基本数据类型实现了可比性。

    我知道可能存在重复。它是使用String进行比较的。但我使用的是pojo类,不能像那样进行比较。如果您有任何想法,请共享。您想合并两个列表的数据而不重复值吗?您可以使用删除重复值:)我知道它可能重复。它是使用字符串进行比较的。但我使用的是pojo类,它不能那样进行比较。如果您有任何想法,请共享。您想合并两个列表的数据而不重复值吗?您可以使用删除重复值:)我不想按顺序,要删除重复项请检查我更新的ans,如果您不需要我不想排序,想删除重复的请检查我更新的ans如果你不需要排序,那么你只需要使用哈希集。