Java 从列表中获取重复的元素

Java 从列表中获取重复的元素,java,Java,我需要从数据库中获取重复3次以上的元素。以下是我的代码,我是如何做到这一点的: public static ArrayList<Integer> getPrice(List<Integer> list) { ArrayList<Integer> result = new ArrayList<Integer>(); int val; HashMap<Integer, Integer> map = new H

我需要从数据库中获取重复3次以上的元素。以下是我的代码,我是如何做到这一点的:

    public static ArrayList<Integer> getPrice(List<Integer> list) {
    ArrayList<Integer> result = new ArrayList<Integer>();
    int val;
    HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
    for (int i = 0; i < list.size(); i++) {
        val = list.get(i);
        if (!map.containsKey(val)) {
            map.put(val, 1);
        } else {
            map.put(val, map.get(val) + 1);
        }
    }
    for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
        if (entry.getValue() > 3) {
result.add(entry.getKey());
        }
    }
    return result;
}
publicstaticarraylistgetprice(列表){
ArrayList结果=新建ArrayList();
int-val;
HashMap=newHashMap();
对于(int i=0;i3){
add(entry.getKey());
}
}
返回结果;
}

这是一种好的、有效的方法吗?

可以有更有效的解决方案,但如果您考虑运行时,它应该没问题。事实上,有2个for循环,其中计数较大的循环占主导地位,这导致O(n),其中n是较大数组的元素数。
这是一个很好的运行时。

可以有更有效的解决方案,但如果您考虑运行时,它应该没问题。事实上,有2个for循环,其中计数较大的循环占主导地位,这导致O(n),其中n是较大数组的元素数。
这是一个很好的运行时。

如果您在数据库中获得列表,我建议您使用SQL。但如果您想在java中实现这一点,您可以这样做:

public static List<Integer> getPrice(List<Integer> list) {
    SetUniqueList<Integer> result = new SetUniqueList<Integer>();
    for (Integer number : list) {
        int occurrences = Collections.frequency(list, number); 
        if (occurrences > 3) {
            result.add(number);
        }
    }
    return result;
}
公共静态列表getPrice(列表){
SetUniqueList结果=新的SetUniqueList();
用于(整数:列表){
int引用=集合。频率(列表、编号);
如果(出现次数>3次){
结果。添加(编号);
}
}
返回结果;
}
或者不带org.apache.commons.collections.list:

public static List<Integer> getPrice(List<Integer> list) {
    Set<Integer> aSet = new HashSet<Integer>();
    for (Integer number : list) {
        if (Collections.frequency(list, number) > 3) {
            aSet.add(number);
        }
    }
    List<Integer> result = new ArrayList<Integer>();
    result.addAll(aSet);
    return result;
}
公共静态列表getPrice(列表){
Set aSet=newhashset();
用于(整数:列表){
if(收集频率(列表、编号)>3){
aSet.添加(编号);
}
}
列表结果=新建ArrayList();
结果:addAll(aSet);
返回结果;
}

如果您在数据库中获得列表,我建议您使用SQL。但如果您想在java中实现这一点,您可以这样做:

public static List<Integer> getPrice(List<Integer> list) {
    SetUniqueList<Integer> result = new SetUniqueList<Integer>();
    for (Integer number : list) {
        int occurrences = Collections.frequency(list, number); 
        if (occurrences > 3) {
            result.add(number);
        }
    }
    return result;
}
公共静态列表getPrice(列表){
SetUniqueList结果=新的SetUniqueList();
用于(整数:列表){
int引用=集合。频率(列表、编号);
如果(出现次数>3次){
结果。添加(编号);
}
}
返回结果;
}
或者不带org.apache.commons.collections.list:

public static List<Integer> getPrice(List<Integer> list) {
    Set<Integer> aSet = new HashSet<Integer>();
    for (Integer number : list) {
        if (Collections.frequency(list, number) > 3) {
            aSet.add(number);
        }
    }
    List<Integer> result = new ArrayList<Integer>();
    result.addAll(aSet);
    return result;
}
公共静态列表getPrice(列表){
Set aSet=newhashset();
用于(整数:列表){
if(收集频率(列表、编号)>3){
aSet.添加(编号);
}
}
列表结果=新建ArrayList();
结果:addAll(aSet);
返回结果;
}

如果它是一个SQL数据库,
选择。。。分组方式。。。拥有COUNT(*)>3
?如果有人问我“getPrice方法可能做什么?”我绝对不会想到它会在整数列表中找到重复三次或更多次的元素。它将是android项目中的SQLite数据库。关于整数,当然价格不会是整数类型,它只是为了测试。NPE,你的建议工作完美,谢谢!如果它是一个SQL数据库,那么选择
不是更容易吗。。。分组方式。。。拥有COUNT(*)>3
?如果有人问我“getPrice方法可能做什么?”我绝对不会想到它会在整数列表中找到重复三次或更多次的元素。它将是android项目中的SQLite数据库。关于整数,当然价格不会是整数类型,它只是为了测试。NPE,你的建议工作完美,谢谢!“但如果你真的想在java中这样做”不是,我只是不知道如何在数据库SQLite中这样做。我正在寻找更有效的方法来实现它。如果你想用SQL实现这一点,在你的问题“但是如果你真的想用java实现这一点”的评论中,你有一个很好的解决方案。我正在寻找一种更有效的方法,如果你想用SQL来实现这一点,在你的问题评论中你有一个很好的解决方案