GVKun编程网logo

如何合并两个没有重复的ArrayList?[重复](合并两个list去除重复的元素)

10

如果您对如何合并两个没有重复的ArrayList?[重复]和合并两个list去除重复的元素感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解如何合并两个没有重复的ArrayList?[重复]的各种

如果您对如何合并两个没有重复的ArrayList?[重复]合并两个list去除重复的元素感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解如何合并两个没有重复的ArrayList?[重复]的各种细节,并对合并两个list去除重复的元素进行深入的分析,此外还有关于android-如何从arraylist中删除重复的联系人、ArrayList list = new ArrayList()在这个泛型为Integer的ArrayList中存放一个String类型的对象、BAT面试题系列 基础篇(二) 数组(Array)和列表(ArrayList)的区别?什么时候应该使用Array而不是ArrayList?、Java ArrayList使用技巧 - 两个ArrayList去除重复的元素的实用技巧。

本文目录一览:

如何合并两个没有重复的ArrayList?[重复](合并两个list去除重复的元素)

如何合并两个没有重复的ArrayList?[重复](合并两个list去除重复的元素)

这个问题已经在这里有了答案

在Java中将两个arrayList合并到一个新的arrayList中,没有重复且没有顺序
(14个答案)

7年前关闭。

我有两个arrayLists

ArrayList one = {A, B, C, D, E}ArrayList two = {B, D, F, G}

我想要我的最终ArrayList,其中将包含一个元素的 所有 元素以及仅包含两个元素而不包含一个元素的元素。

因此ArrayList final = {A,B,C,D,E,F,G}。

我怎样才能做到这一点?

答案1

小编典典
for (Object x : two){   if (!one.contains(x))      one.add(x);}

假设您不想使用注释中建议的设置。如果您正在寻找比这更好的东西,请澄清您的问题。

android-如何从arraylist中删除重复的联系人

android-如何从arraylist中删除重复的联系人

我创建了一个应用程序,可以在其中从设备获取联系人.
但是我想从结果中删除重复的联系人.

我该怎么办?

主要活动

public class MainActivity extends Activity implements OnItemClickListener {

EditText searchText;

ArrayList<String> phno0 = new ArrayList<String>();
List<String> arrayListNames;
public List<ProfileBean> list;
public SearchableAdapter adapter;
//ProfileBean bean;
String[] cellArray = null;
String contacts;
ListView lv;
String phoneNumber, name;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ActionBar actionBar = getActionBar();


    lv = (ListView) findViewById(R.id.listview);
    list = new ArrayList<ProfileBean>();
    getAllCallLogs(this.getContentResolver());
    adapter = new SearchableAdapter(getApplication(), list);
    lv.setAdapter(adapter);
    lv.setItemsCanFocus(false);
    lv.setonItemClickListener(this);
    lv.setTextFilterEnabled(true);


}

@Override
protected void onStart() {
    // Todo Auto-generated method stub
    super.onStart();

}

public void getAllCallLogs(ContentResolver cr) {

    Cursor phones = cr.query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,
            null, ContactsContract.CommonDataKinds.Phone.disPLAY_NAME
                    + " ASC");
    while (phones.movetoNext()) {
        phoneNumber = phones
                .getString(phones
                        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        name = phones
                .getString(phones
                        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.disPLAY_NAME));

        list.add(new ProfileBean(name, phoneNumber));

    }
    phones.close();
}
}

解决方法:

在list.add(new ProfileBean(name,phoneNumber));的位置添加以下检查.加入清单之前:

int flag = 0
if(list.size() == 0){
list.add(new ProfileBean(name, phoneNumber));
}
    for(int i=0;i<list.size();i++){

    if(!list.get(i).getProfileName().trim().equals(name)){
    flag = 1;

    }else{
     flag =0;
     break;

}

    }
if(flag == 1){
list.add(new ProfileBean(name, phoneNumber));
}

ArrayList list = new ArrayList()在这个泛型为Integer的ArrayList中存放一个String类型的对象

ArrayList list = new ArrayList()在这个泛型为Integer的ArrayList中存放一个String类型的对象

java面试要点---ArrayList list = new ArrayList(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象。

ArrayList list = new ArrayList(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象。 
1.刚刚看到的时候,也是很纳闷后来仔细看了下,java的反射机制;
2.这个可以通过java的反射机制来实现;
3.下面是一个例子:
 package com.credream.refelect;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class TestFile {
public static void main(String[] args) throws Exception {
List<Integer> list = new ArrayList<Integer>(); //定义Integer泛型
String str = "abc"; 
Method[] method=list.getClass().getMethods();//取得list的所有方法
System.out.println(method.length);
for(int i=0;i<method.length;i++){
System.out.println(method[i]);//遍历打印list的方法
}
method[0].invoke(list, str);//通过 反射来执行 list的第一个方法,第一个是list对象,代表该对象的方法,第二个是方法参数:  就是list.add(str);
System.out.println(list.size());
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}
 ------------------------------------------------------------------------------------------------------------------
运行结果:
 35
public boolean java.util.ArrayList.add(java.lang.Object)
public void java.util.ArrayList.add(int,java.lang.Object)
public java.lang.Object java.util.ArrayList.get(int)
public java.lang.Object java.util.ArrayList.clone()
public int java.util.ArrayList.indexOf(java.lang.Object)
public void java.util.ArrayList.clear()
public boolean java.util.ArrayList.contains(java.lang.Object)
public boolean java.util.ArrayList.isEmpty()
public int java.util.ArrayList.lastIndexOf(java.lang.Object)
public boolean java.util.ArrayList.addAll(int,java.util.Collection)
public boolean java.util.ArrayList.addAll(java.util.Collection)
public int java.util.ArrayList.size()
public java.lang.Object[] java.util.ArrayList.toArray(java.lang.Object[])
public java.lang.Object[] java.util.ArrayList.toArray()
public boolean java.util.ArrayList.remove(java.lang.Object)
public java.lang.Object java.util.ArrayList.remove(int)
public java.lang.Object java.util.ArrayList.set(int,java.lang.Object)
public void java.util.ArrayList.ensureCapacity(int)
public void java.util.ArrayList.trimToSize()
public int java.util.AbstractList.hashCode()
public boolean java.util.AbstractList.equals(java.lang.Object)
public java.util.Iterator java.util.AbstractList.iterator()
public java.util.List java.util.AbstractList.subList(int,int)
public java.util.ListIterator java.util.AbstractList.listIterator(int)
public java.util.ListIterator java.util.AbstractList.listIterator()
public java.lang.String java.util.AbstractCollection.toString()
public boolean java.util.AbstractCollection.containsAll(java.util.Collection)
public boolean java.util.AbstractCollection.removeAll(java.util.Collection)
public boolean java.util.AbstractCollection.retainAll(java.util.Collection)
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
1
abc

BAT面试题系列 基础篇(二) 数组(Array)和列表(ArrayList)的区别?什么时候应该使用Array而不是ArrayList?

BAT面试题系列 基础篇(二) 数组(Array)和列表(ArrayList)的区别?什么时候应该使用Array而不是ArrayList?

BAT面试题系列 基础篇 目录

BAT面试题系列 基础篇(一)

BAT面试题系列 基础篇(二)

BAT面试题系列 基础篇(三)

BAT面试题系列 基础篇(四)

BAT面试题系列 基础篇(五)

BAT面试题系列 基础篇(六)

BAT面试题系列 基础篇(七)

BAT面试题系列 基础篇(八)

 BAT面试题系列 基础篇(二)

● 请你谈谈大O符号(big-O notation)并给出不同数据结构的例子

考察点:JAVA notation

参考回答:

大O符号描述了当数据结构里面的元素增加的时候,算法的规模或者是性能在最坏的场景下有多么好。
大O符号也可用来描述其他的行为,比如:内存消耗。因为集合类实际上是数据结构,我们一般使用大O符号基于时间,内存和性能来选择最好的实现。大O符号可以对大量数据的性能给出一个很好的说明。

同时,大O符号表示一个程序运行时所需要的渐进时间复杂度上界。

其函数表示是:

对于函数f(n),g(n),如果存在一个常数c,使得f(n)<=c*g(n),则f(n)=O(g(n));

大O描述当数据结构中的元素增加时,算法的规模和性能在最坏情景下有多好。

大O还可以描述其它行为,比如内存消耗。因为集合类实际上是数据结构,因此我们一般使用大O符号基于时间,内存,性能选择最好的实现。大O符号可以对大量数据性能给予一个很好的说明。

 

 

 

● 请你讲讲数组(Array)和列表(ArrayList)的区别?什么时候应该使用Array而不是ArrayList?

考察点:Array

参考回答:

Array和ArrayList的不同点:
Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。
Array大小是固定的,ArrayList的大小是动态变化的。
ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。

● 请你解释什么是值传递和引用传递?

考察点:JAVA引用传递

参考回答:

值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量.
引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。 所以对引用对象进行操作会同时改变原对象.
一般认为,java内的传递都是值传递.

● 请你讲讲Java支持的数据类型有哪些?什么是自动拆装箱?

考察点:JAVA数据类型

参考回答:

Java语言支持的8种基本数据类型是:
byte
short
int
long
float
double
boolean
char
自动装箱是Java编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把int转化成Integer,double转化成Double,等等。反之就是自动拆箱。

● 请你解释为什么会出现4.0-3.6=0.40000001这种现象?

考察点:计算机基础

参考回答:

原因简单来说是这样:2进制的小数无法精确的表达10进制小数,计算机在计算10进制小数的过程中要先转换为2进制进行计算,这个过程中出现了误差。

● 请你讲讲一个十进制的数在内存中是怎么存的?

考察点:计算机基础

参考回答:

补码的形式。

● 请你说说Lamda表达式的优缺点。

考察点:Java基础

参考回答:

优点:1. 简洁。2. 非常容易并行计算。3. 可能代表未来的编程趋势。

缺点:1. 若不用并行计算,很多时候计算速度没有比传统的 for 循环快。(并行计算有时需要预热才显示出效率优势)2. 不容易调试。3. 若其他程序员没有学过 lambda 表达式,代码不容易让其他语言的程序员看懂。

● 你知道java8的新特性吗,请简单介绍一下

考察点:java8

参考回答:

Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。

方法引用− 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。

默认方法− 默认方法就是一个在接口里面有了一个实现的方法。

新工具− 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。

Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。

Date Time API − 加强对日期与时间的处理。

Optional 类 − Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。

Nashorn, JavaScript 引擎 − Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用。

● 请你说明符号“==”比较的是什么?

考点:基础

参考回答:

“==”对比两个对象基于内存引用,如果两个对象的引用完全相同(指向同一个对象)时,“==”操作将返回true,否则返回false。“==”如果两边是基本类型,就是比较数值是否相等。

● 请你解释Object若不重写hashCode()的话,hashCode()如何计算出来的?

考点:基础

参考回答:

Object 的 hashcode 方法是本地方法,也就是用 c 语言或 c++ 实现的,该方法直接返回对象的 内存地址。

● 请你解释为什么重写equals还要重写hashcode?

考点:java基础

参考回答:

HashMap中,如果要比较key是否相等,要同时使用这两个函数!因为自定义的类的hashcode()方法继承于Object类,其hashcode码为默认的内存地址,这样即便有相同含义的两个对象,比较也是不相等的。HashMap中的比较key是这样的,先求出key的hashcode(),比较其值是否相等,若相等再比较equals(),若相等则认为他们是相等的。若equals()不相等则认为他们不相等。如果只重写hashcode()不重写equals()方法,当比较equals()时只是看他们是否为同一对象(即进行内存地址的比较),所以必定要两个方法一起重写。HashMap用来判断key是否相等的方法,其实是调用了HashSet判断加入元素 是否相等。重载hashCode()是为了对同一个key,能得到相同的Hash Code,这样HashMap就可以定位到我们指定的key上。重载equals()是为了向HashMap表明当前对象和key上所保存的对象是相等的,这样我们才真正地获得了这个key所对应的这个键值对。

● 请你介绍一下map的分类和常见的情况

考点:java基础

参考回答:

java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap.

Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。

Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。 HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。

Hashtable与 HashMap类似,它继承自Dictionary类,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。

LinkedHashMap 是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造时用带参数,按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比 LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。

TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

一般情况下,我们用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。如果需要输出的顺序和输入的相同,那么用LinkedHashMap 可以实现,它还可以按读取顺序来排列.

HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为NULL,允许多条记录的值为NULL。

HashMap不支持线程同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致性。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。

Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtable在写入时会比较慢。

LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。

在遍历的时候会比HashMap慢TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iterator遍历TreeMap时,得到的记录是排过序的。

Java ArrayList使用技巧 - 两个ArrayList去除重复的元素

Java ArrayList使用技巧 - 两个ArrayList去除重复的元素

方法一、ArrayList中提供的removeAll方法(效率最低)
List1.removeAll(mSubList);
方法二、双重循环(比方法一效率高)

双重循环分为内外两层循环,经过测试,将元素多的list放在外层循环效率更高(mSubList中的元素可能比List1多)(被删除元素的列表List1放在外层循环和内层循环的实现方式有些差别),这里的测试数据是List1中的元素多,实现如下:

int maxSize = List1.size(); for (int i = maxSize-1; i >=0; i--) { int size = mSubList.size(); while (size > 0) { String s = mSubList.get(size-1); if (s.equals(List1.get(i))) { mSubList.remove(size-1); List1.remove(i); break; } size--; } }
方法三、利用HashMap(效率最高)
//第一步:构建list的HashMap,将list中的元素作为键,将list中的元素对应的位置作为值
// 如果不是String类,需要实现hashCode,equals方法,equals不一定要调用,但是一定要书写
Map<String, Integer> map = new HashMap<>(); for (int i = 0; i < List1.size(); i++) { map.put(List1.get(i), i); } //第二步:利用map遍历mSubList,查找重复元素 //把List1中所有查到的重复元素的位置置空 for (int i = 0; i < mSubList.size(); i++) { Integer pos = map.get(mSubList.get(i)); if (pos==null) { continue; } List1.set(pos, null); } //第三步:把List1中所有的空元素移除 for (int i = List1.size()-1; i>=0; i--) { if (List1.get(i)==null) { List1.remove(i); } }
方法三的一些说明
  1. 方法三中初始化HashMap的时候已经知道了容量大小,理论上直接指定HashMap的大小避免扩容可以提高效率,但是测试发现并没有提高,100000条数据都是几十毫秒
  2. 虽然方法三中HashMap存的值是整数,但是不要使用int pos = map.get(mSubList.get(i));取值,会崩溃
  3. 第二步中,使用Integer pos = map.get(mSubList.get(i));取值,然后判断 pos 是否是空来判断map中是否包含键是mSubList.get(i)的值,比用map.containsKey(key)来判断然后get取值少访问一次哈希表
  4. 第三步中,从List1尾部开始遍历移除

关于如何合并两个没有重复的ArrayList?[重复]合并两个list去除重复的元素的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于android-如何从arraylist中删除重复的联系人、ArrayList list = new ArrayList()在这个泛型为Integer的ArrayList中存放一个String类型的对象、BAT面试题系列 基础篇(二) 数组(Array)和列表(ArrayList)的区别?什么时候应该使用Array而不是ArrayList?、Java ArrayList使用技巧 - 两个ArrayList去除重复的元素的相关信息,请在本站寻找。

本文标签: