Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从ArrayList中删除重复的元素?_Java_List_Collections_Arraylist_Duplicates - Fatal编程技术网

Java 如何从ArrayList中删除重复的元素?

Java 如何从ArrayList中删除重复的元素?,java,list,collections,arraylist,duplicates,Java,List,Collections,Arraylist,Duplicates,我有一个ArrayList,我想从中删除重复的字符串。我怎样才能做到这一点? 如果你不想在集合< />代码中重复,你应该考虑为什么使用集合允许重复。删除重复元素的最简单方法是将内容添加到集合(不允许重复),然后将集合添加回数组列表: Set<String> set = new HashSet<>(yourList); yourList.clear(); yourList.addAll(set); Set Set=newhashset(yourList); yourLis

我有一个
ArrayList
,我想从中删除重复的字符串。我怎样才能做到这一点?

如果你不想在<代码>集合< />代码中重复,你应该考虑为什么使用<代码>集合允许重复。删除重复元素的最简单方法是将内容添加到
集合
(不允许重复),然后将
集合
添加回
数组列表

Set<String> set = new HashSet<>(yourList);
yourList.clear();
yourList.addAll(set);
Set Set=newhashset(yourList);
yourList.clear();
yourList.addAll(set);

当然,这会破坏
数组列表中元素的顺序

如果不希望重复,请使用一个而不是
列表
。要将
列表
转换为
集合
,可以使用以下代码:

// list is some List of Strings
Set<String> s = new HashSet<String>(list);
//list是字符串的一些列表
Set s=新哈希集(列表);

如果确实需要,您可以使用相同的构造将
集合
转换回
列表

虽然将
数组列表
转换为
哈希集合
可以有效地删除重复项,但如果您需要保留插入顺序,我建议您使用此变体

// list is some List of Strings
Set<String> s = new LinkedHashSet<>(list);
//list是字符串的一些列表
Set s=新的LinkedHashSet(列表);

然后,如果需要返回
列表
引用,可以再次使用转换构造函数。

如前所述,应该使用实现Set接口的类而不是List来确保元素的唯一性。如果必须保持元素的顺序,则可以使用SortedSet接口;TreeSet类实现了该接口。

可能有点过分,但我喜欢这种孤立的问题。:)

此代码使用临时集合(用于唯一性检查),但直接删除原始列表中的元素。由于在ArrayList中删除元素会导致大量的数组复制,因此可以避免使用remove(int)-方法

public static <T> void removeDuplicates(ArrayList<T> list) {
    int size = list.size();
    int out = 0;
    {
        final Set<T> encountered = new HashSet<T>();
        for (int in = 0; in < size; in++) {
            final T t = list.get(in);
            final boolean first = encountered.add(t);
            if (first) {
                list.set(out++, t);
            }
        }
    }
    while (out < size) {
        list.remove(--size);
    }
}
移除的公共静态无效副本(ArrayList列表){
int size=list.size();
int out=0;
{
遇到的最终集=新HashSet();
for(int in=0;in
当我们在做的时候,这里有一个LinkedList的版本(更好!)

publicstaticvoidremoveduplices(LinkedList列表){
遇到的最终集=新HashSet();
for(迭代器iter=list.Iterator();iter.hasNext();){
最终T=iter.next();
final boolean first=遇到。添加(t);
如果(!第一个){
iter.remove();
}
}
}
使用marker界面为列表提供统一的解决方案:

public static <T> void removeDuplicates(List<T> list) {
    if (list instanceof RandomAccess) {
        // use first version here
    } else {
        // use other version here
    }
}
移除的公共静态无效副本(列表){
if(列出随机访问的实例){
//在这里使用第一个版本
}否则{
//在这里使用其他版本
}
}

编辑:我猜泛型的东西在这里并没有真正增加任何价值。。哦,好的

以下是一种不会影响列表顺序的方法:

ArrayList l1 = new ArrayList();
ArrayList l2 = new ArrayList();

Iterator iterator = l1.iterator();

while (iterator.hasNext()) {
    YourClass o = (YourClass) iterator.next();
    if(!l2.contains(o)) l2.add(o);
}
l1是原始列表,l2是没有重复项的列表
(确保您的类根据您想要代表相等的内容具有equals方法)

填充ArrayList时,为每个元素使用一个条件。例如:

    ArrayList< Integer > al = new ArrayList< Integer >(); 

    // fill 1 
    for ( int i = 0; i <= 5; i++ ) 
        if ( !al.contains( i ) ) 
            al.add( i ); 

    // fill 2 
    for (int i = 0; i <= 10; i++ ) 
        if ( !al.contains( i ) ) 
            al.add( i ); 

    for( Integer i: al )
    {
        System.out.print( i + " ");     
    }
ArrayListal=newarraylist();
//填充1
对于(int i=0;i也有from作为选项(是文档):

for(inta=0;a
importjava.util.*;
类RemoveDupFrmString
{
公共静态void main(字符串[]args)
{
字符串s=“appsc”;
Set unique=newlinkedhashset();
for(char c:s.toCharArray()){
System.out.println(unique.add(c));
}
for(char-dis:unique){
系统输出打印(dis);
}
}
}

LinkedHashSet将实现这一目的

String[] arr2 = {"5","1","2","3","3","4","1","2"};
Set<String> set = new LinkedHashSet<String>(Arrays.asList(arr2));
for(String s1 : set)
    System.out.println(s1);

System.out.println( "------------------------" );
String[] arr3 = set.toArray(new String[0]);
for(int i = 0; i < arr3.length; i++)
     System.out.println(arr3[i].toString());
String[]arr2={“5”、“1”、“2”、“3”、“3”、“4”、“1”、“2”};
Set Set=newlinkedhashset(Arrays.asList(arr2));
for(字符串s1:set)
系统输出打印LN(s1);
System.out.println(“---------------------------”);
String[]arr3=set.toArray(新字符串[0]);
对于(int i=0;i
//输出:5,1,2,3,4{
public Set<Object> findDuplicates(List<Object> list) {
        Set<Object> items = new HashSet<Object>();
        Set<Object> duplicates = new HashSet<Object>();
        for (Object item : list) {
            if (items.contains(item)) {
                duplicates.add(item);
                } else { 
                    items.add(item);
                    } 
            } 
        return duplicates;
        }
Set items=new HashSet(); Set duplicates=new HashSet(); 用于(对象项:列表){ if(项目。包含(项目)){ 副本。添加(项目); }否则{ 项目。添加(项目); } } 返回副本; }
这可以解决问题:

private List<SomeClass> clearListFromDuplicateFirstName(List<SomeClass> list1) {

     Map<String, SomeClass> cleanMap = new LinkedHashMap<String, SomeClass>();
     for (int i = 0; i < list1.size(); i++) {
         cleanMap.put(list1.get(i).getFirstName(), list1.get(i));
     }
     List<SomeClass> list = new ArrayList<SomeClass>(cleanMap.values());
     return list;
}
私有列表clearListFromDuplicateFirstName(列表列表1){
Map cleanMap=新建LinkedHashMap();
对于(int i=0;i
如果您想保留订单,最好使用LinkedHashSet。 因为如果要通过迭代将此列表传递给Insert查询,则会保留顺序

试试这个

LinkedHashSet link=new LinkedHashSet();
List listOfValues=new ArrayList();
listOfValues.add(link);

当您希望返回列表而不是集合时,此转换将非常有用。

可以从arraylist中删除重复项,而无需使用HashSet再使用一个arraylist

请尝试此代码

    ArrayList<String> lst = new ArrayList<String>();
    lst.add("ABC");
    lst.add("ABC");
    lst.add("ABCD");
    lst.add("ABCD");
    lst.add("ABCE");

    System.out.println("Duplicates List "+lst);

    Object[] st = lst.toArray();
      for (Object s : st) {
        if (lst.indexOf(s) != lst.lastIndexOf(s)) {
            lst.remove(lst.lastIndexOf(s));
         }
      }

    System.out.println("Distinct List "+lst);
在Java 8中:

List<String> deduped = list.stream().distinct().collect(Collectors.toList());
List dedupled=List.stream().distinct().collect(Collectors.toList());
请注意,要使筛选正常工作,应遵守列表成员的合同。

ArrayList list=new ArrayList();
    ArrayList<String> list = new ArrayList<String>();
    HashSet<String> unique = new LinkedHashSet<String>();
    HashSet<String> dup = new LinkedHashSet<String>();
    boolean b = false;
    list.add("Hello");
    list.add("Hello");
    list.add("how");
    list.add("are");
    list.add("u");
    list.add("u");

    for(Iterator iterator= list.iterator();iterator.hasNext();)
    {
        String value = (String)iterator.next();
        System.out.println(value);

        if(b==unique.add(value))
            dup.add(value);
        else
            unique.add(value);


    }
    System.out.println(unique);
    System.out.println(dup);
HashSet unique=新LinkedHashSet(); HashSet dup=new LinkedHashSet();
LinkedHashSet link=new LinkedHashSet();
List listOfValues=new ArrayList();
listOfValues.add(link);
    ArrayList<String> lst = new ArrayList<String>();
    lst.add("ABC");
    lst.add("ABC");
    lst.add("ABCD");
    lst.add("ABCD");
    lst.add("ABCE");

    System.out.println("Duplicates List "+lst);

    Object[] st = lst.toArray();
      for (Object s : st) {
        if (lst.indexOf(s) != lst.lastIndexOf(s)) {
            lst.remove(lst.lastIndexOf(s));
         }
      }

    System.out.println("Distinct List "+lst);
Duplicates List [ABC, ABC, ABCD, ABCD, ABCE]
Distinct List [ABC, ABCD, ABCE]
List<String> deduped = list.stream().distinct().collect(Collectors.toList());
    ArrayList<String> list = new ArrayList<String>();
    HashSet<String> unique = new LinkedHashSet<String>();
    HashSet<String> dup = new LinkedHashSet<String>();
    boolean b = false;
    list.add("Hello");
    list.add("Hello");
    list.add("how");
    list.add("are");
    list.add("u");
    list.add("u");

    for(Iterator iterator= list.iterator();iterator.hasNext();)
    {
        String value = (String)iterator.next();
        System.out.println(value);

        if(b==unique.add(value))
            dup.add(value);
        else
            unique.add(value);


    }
    System.out.println(unique);
    System.out.println(dup);
public static Object[] removeDuplicate(Object[] inputArray)
{
    long startTime = System.nanoTime();
    int totalSize = inputArray.length;
    Object[] resultArray = new Object[totalSize];
    int newSize = 0;
    for(int i=0; i<totalSize; i++)
    {
        Object value = inputArray[i];
        if(value == null)
        {
            continue;
        }

        for(int j=i+1; j<totalSize; j++)
        {
            if(value.equals(inputArray[j]))
            {
                inputArray[j] = null;
            }
        }
        resultArray[newSize++] = value;
    }

    long endTime = System.nanoTime()-startTime;
    System.out.println("Total Time-B:"+endTime);
    return resultArray;
}
List<Entity> entities = repository.findByUserId(userId);

Set<Entity> s = new LinkedHashSet<Entity>(entities);
entities.clear();
entities.addAll(s);
List<String> duplicatList = new ArrayList<String>();
duplicatList = Arrays.asList("AA","BB","CC","DD","DD","EE","AA","FF");
//above AA and DD are duplicate
Set<String> uniqueList = new HashSet<String>(duplicatList);
duplicatList = new ArrayList<String>(uniqueList); //let GC will doing free memory
System.out.println("Removed Duplicate : "+duplicatList);
        List<String> result = new ArrayList<String>();
        Set<String> set = new LinkedHashSet<String>();
        String s = "ravi is a good!boy. But ravi is very nasty fellow.";
        StringTokenizer st = new StringTokenizer(s, " ,. ,!");
        while (st.hasMoreTokens()) {
            result.add(st.nextToken());
        }
         System.out.println(result);
         set.addAll(result);
        result.clear();
        result.addAll(set);
        System.out.println(result);

output:
[ravi, is, a, good, boy, But, ravi, is, very, nasty, fellow]
[ravi, is, a, good, boy, But, very, nasty, fellow]
 List<String> cityList = new ArrayList<>();
 cityList.add("Delhi");
 cityList.add("Mumbai");
 cityList.add("Bangalore");
 cityList.add("Chennai");
 cityList.add("Kolkata");
 cityList.add("Mumbai");

 cityList = cityList.stream().distinct().collect(Collectors.toList());
public static void main(String[] args){
    ArrayList<Object> al = new ArrayList<Object>();
    al.add("abc");
    al.add('a');
    al.add('b');
    al.add('a');
    al.add("abc");
    al.add(10.3);
    al.add('c');
    al.add(10);
    al.add("abc");
    al.add(10);
    System.out.println("Before Duplicate Remove:"+al);
    for(int i=0;i<al.size();i++){
        for(int j=i+1;j<al.size();j++){
            if(al.get(i).equals(al.get(j))){
                al.remove(j);
                j--;
            }
        }
    }
    System.out.println("After Removing duplicate:"+al);
}
ListIterable<Integer> integers = FastList.newListWith(1, 3, 1, 2, 2, 1);
Assert.assertEquals(
    FastList.newListWith(1, 3, 2),
    integers.distinct());
MutableSet<T> seenSoFar = UnifiedSet.newSet();
int size = list.size();
for (int i = 0; i < size; i++)
{
    T item = list.get(i);
    if (seenSoFar.add(item))
    {
        targetCollection.add(item);
    }
}
return targetCollection;
MutableList<Integer> distinct = ListAdapter.adapt(integers).distinct();
ArrayList<String> city=new ArrayList<String>();
city.add("rajkot");
city.add("gondal");
city.add("rajkot");
city.add("gova");
city.add("baroda");
city.add("morbi");
city.add("gova");

HashSet<String> hashSet = new HashSet<String>();
hashSet.addAll(city);
city.clear();
city.addAll(hashSet);
Toast.makeText(getActivity(),"" + city.toString(),Toast.LENGTH_SHORT).show();
List<String> strList = new ArrayList<>(5);
// insert up to five items to list.        
List<String> deDupStringList = new ArrayList<>(new HashSet<>(strList));
List<String> deDupStringList2 = Lists.newArrayList(Sets.newHashSet(strList));
List<String> deDupStringList3 = strList.stream().distinct().collect(Collectors.toList());
List<String> deDupStringList3 = strList.stream().distinct()
                 .collect(Collectors.toCollection(LinkedList::new));
// delete duplicates (if any) from 'myArrayList'
myArrayList = new ArrayList<String>(new LinkedHashSet<String>(myArrayList));
   public List<Contact> removeDuplicates(List<Contact> list) {
    // Set set1 = new LinkedHashSet(list);
    Set set = new TreeSet(new Comparator() {

        @Override
        public int compare(Object o1, Object o2) {
            if (((Contact) o1).getId().equalsIgnoreCase(((Contact) o2).getId()) /*&&
                    ((Contact)o1).getName().equalsIgnoreCase(((Contact)o2).getName())*/) {
                return 0;
            }
            return 1;
        }
    });
    set.addAll(list);

    final List newList = new ArrayList(set);
    return newList;
}
ArrayList<Class1> l1 = new ArrayList<Class1>();
ArrayList<Class1> l2 = new ArrayList<Class1>();

        Iterator iterator1 = l1.iterator();
        boolean repeated = false;

        while (iterator1.hasNext())
        {
            Class1 c1 = (Class1) iterator1.next();
            for (Class1 _c: l2) {
                if(_c.getId() == c1.getId())
                    repeated = true;
            }
            if(!repeated)
                l2.add(c1);
        }
for (int i = 0; i < Models.size(); i++){
for (int j = i + 1; j < Models.size(); j++) {       
 if (Models.get(i).getName().equals(Models.get(j).getName())) {    
 Models.remove(j);
   j--;
  }
 }
}