首页 > 解决方案 > 使用泛型在java上查找重复项

问题描述

我是泛型新手,我想使用泛型查找重复数据。所以,我尝试这样:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class RemoveDuplicate {
    
    public static  void main(String[] args) {
        Integer[] i= {12,12,12,12,5,2,42,4,2,5,3,35,3,1,23,54,44};
        removeDuplicates(i);
    }
    
    public static <T extends Number> T[] removeDuplicates(T[] list) {
        Map<T,Integer> duplicateCounr=new HashMap<T,Integer>();
        for(T t:list) {
            
           Integer x=duplicateCounr.get(t);
          
           if(x==null) {
               duplicateCounr.put(t,1); 
           }
           else {
               Integer count=duplicateCounr.get(t);
               duplicateCounr.put(t,++count); 
           }
        }
        List<? extends Number> nList=new ArrayList<>();
        
        for (Map.Entry<T, Integer> entry : duplicateCounr.entrySet()) {
            T key = entry.getKey();
            Integer v = entry.getValue();
            if(v>1) {
                nList.add(key);
                System.out.println("Duplicate" + key + ", Count: " + v);
            }
            
        }
        return null;
    }

}

我在收到错误nList.add(key);。因为,我只会传递 double、float、int 值,所以我声明List<? extends Number> nList=new ArrayList<>();了。为什么没有在其中插入重复的数据nList

标签: java

解决方案


您不能添加到这种类型的列表中,因为您不知道要传递什么类型的对象。

List<? extends Number> nList=new ArrayList<>();

相反,您可以使用

List<T> nList=new ArrayList<>();

推荐阅读