Java 在列表最佳解决方案中查找给定数字的计数出现次数

Java 在列表最佳解决方案中查找给定数字的计数出现次数,java,arraylist,Java,Arraylist,我已经写了一个解决方案来查找n个列表中出现的一个公共数字。我只是担心这是否是最好的解决方案?请建议最好的方法 import java.util.Arrays; import java.util.List; public class CommonNumberFinder { final static List<Number> list1 = Arrays.asList(new Number[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }); fina

我已经写了一个解决方案来查找n个列表中出现的一个公共数字。我只是担心这是否是最好的解决方案?请建议最好的方法

import java.util.Arrays;
import java.util.List;

public class CommonNumberFinder
{

    final static List<Number> list1 = Arrays.asList(new Number[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 });
    final static List<Number> list2 = Arrays
            .asList(new Number[] { 3, 5, 1, 6, 2, 6, 3, 3, 6, 1, 5, 7, 2, 6, 2, 5, 2, 6, 8, 2 });

    public static void main(String[] args)
    {
        findCountOfNumber(Arrays.asList(new List[] { list1, list2 }), 6);
    }

    private static void findCountOfNumber(final List<List<Number>> lists, final Number num)
    {
        int count = 0;
        for (List<Number> list : lists)
        {
            if (!list.contains(num))
            {
                System.err.printf("Number %d is not common", num);
            }
        }
        for (List<Number> list : lists)
        {
            for (Number number : list)
            {
                if (number == num)
                    count++;
            }
            System.out.println("List have-" + count);
            count = 0;
        }

    }
}
导入java.util.array;
导入java.util.List;
公共类CommonNumberFinder
{
最终的静态列表list1=Arrays.asList(新的数字[]{1,2,3,4,5,6,7,8,9});
最终静态列表list2=数组
.asList(新编号[]{3,5,1,6,2,6,3,3,6,1,5,7,2,6,2,5,2,6,8,2});
公共静态void main(字符串[]args)
{
findCountOfNumber(Arrays.asList(新列表[]{list1,list2}),6);
}
私有静态void findcontofnumber(最终列表列表,最终编号num)
{
整数计数=0;
用于(列表:列表)
{
如果(!list.contains(num))
{
System.err.printf(“编号%d不常见”,num);
}
}
用于(列表:列表)
{
用于(编号:列表)
{
if(number==num)
计数++;
}
System.out.println(“列表有-”+计数);
计数=0;
}
}
}
简单得多

Java中已经有了一个函数:

Collections.frequency(list,num);
所以在你的情况下,你必须做一个循环:

for(List<Number> nestedList : lists){
    count+=Collections.frequency(nestedList,num);
}
if(count == 0) {                
   System.err.print(num+ " is not common");
} else{
   System.out.println("List have-" + count);
}
for(列表嵌套列表:列表){
count+=Collections.frequency(nestedList,num);
}
如果(计数==0){
系统错误打印(num+“不常见”);
}否则{
System.out.println(“列表有-”+计数);
}

这将给出所需的输出

您的代码错误地处理了
计数
变量,因为您没有为每个列表重置它

优化您的代码:

for (List<Number> list : lists)
{
    count = Collections.frequency(list ,num);

    if(0 == count) {                
       System.err.printf("Number %d is not common", num);
    }else{
       System.out.println("List have-" + count);
    }
}
for(列表:列表)
{
计数=集合。频率(列表,num);
如果(0==计数){
System.err.printf(“编号%d不常见”,num);
}否则{
System.out.println(“列表有-”+计数);
}
}

如果您不能使用Itamar提到的功能(如果这是一项任务,可能会出现这种情况),我将在下面添加一个简化版本:

private static void findCountOfNumber(final List<List<Number>> lists, final Number num)
{
    for (List<Number> list : lists)
    {
        int count = 0;
        for (Number number : list)
        {
            if (number == num)
                count++;
        }
        if (count == 0) {
            System.err.printf("Number %d is not common", num);
        } else {
            System.out.println("List have-" + count);
        }
    }

}
private static void findcontofnumber(最终列表列表,最终编号num)
{
用于(列表:列表)
{
整数计数=0;
用于(编号:列表)
{
if(number==num)
计数++;
}
如果(计数=0){
System.err.printf(“编号%d不常见”,num);
}否则{
System.out.println(“列表有-”+计数);
}
}
}

您可以使用特定列表正确指定计数

private static void findCountOfNumber(final List<List<Number>> lists, final Number num) {
    int count = 0, listNumber = 0;
    for (List<Number> list : lists) {
        listNumber++;
        count = Collections.frequency(list, num);
        if (count == 0) {
            System.err.printf("Number %d is not common in list %d", num, listNumber);
        } else {
            System.out.println("List " + listNumber + " has count : " + count);
        }
    }
}
private static void findcontofnumber(最终列表列表,最终编号num){
int count=0,listNumber=0;
用于(列表:列表){
listNumber++;
计数=集合。频率(列表,num);
如果(计数=0){
System.err.printf(“编号%d在列表%d中不常见”,num,listNumber);
}否则{
System.out.println(“列表”+listNumber+”有计数:“+count”);
}
}
}

try@ScaryWombat感谢并记录在案:最好并不是一个好标准。最好什么?可读性?性能?您的解决方案不会检查数字是否常见,是否不是最好的。@AnkitKatiyar“不是最好的”是什么意思?您有更好的建议吗?您和我的两种解决方案都可以满足要求,但您的代码的复杂性比我的高。我正在寻找一个复杂度和运行时间尽可能少的解决方案。@AnkitKatiyar这不是真的。您使用的是嵌套的for,它比
Collections
@Itamer Green java.util.Collections.frequency(Collection,Object)还使用for循环更复杂。所以几乎是一样的。