Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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)_Java_Arraylist_Duplicates - Fatal编程技术网

计数重复列表(Java)

计数重复列表(Java),java,arraylist,duplicates,Java,Arraylist,Duplicates,我想在Java中计算ArrayList中的重复项,如何计算 特别是,我想创建一个应用程序,告诉我给定数字中有多少素数因子,并将它们全部保存在整数数组列表中 然后,ArrayList看起来像这样(例如,数字100)[2,2,5,5] 我想数一数有多少2,有多少5 提前谢谢 您可以在这个用例中使用Map。如下所示: //将所有值放入映射中 for (Integer temp : list) { Integer count = map.get(temp);

我想在Java中计算ArrayList中的重复项,如何计算

特别是,我想创建一个应用程序,告诉我给定数字中有多少素数因子,并将它们全部保存在整数数组列表中

然后,ArrayList看起来像这样(例如,数字100)[2,2,5,5]

我想数一数有多少2,有多少5


提前谢谢

您可以在这个用例中使用Map。如下所示:

//将所有值放入映射中

   for (Integer temp : list) {
            Integer count = map.get(temp);
            map.put(temp, (count == null) ? 1 : count + 1);
        }
//这是一个罕见的地图和视图副本

for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
        System.out.println("Found Duplicate for " + entry.getKey() + "  "
            + entry.getValue()+"  times.");
    }
for(Map.Entry:Map.entrySet()){
System.out.println(“为“+entry.getKey()+”找到重复项”
+entry.getValue()+“times.”);
}

您可以在这个用例中使用Map。如下所示:

//将所有值放入映射中

   for (Integer temp : list) {
            Integer count = map.get(temp);
            map.put(temp, (count == null) ? 1 : count + 1);
        }
//这是一个罕见的地图和视图副本

for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
        System.out.println("Found Duplicate for " + entry.getKey() + "  "
            + entry.getValue()+"  times.");
    }
for(Map.Entry:Map.entrySet()){
System.out.println(“为“+entry.getKey()+”找到重复项”
+entry.getValue()+“times.”);
}

您可以使用收藏的频率功能:


int executions=Collections.frequency(yourList,whatToCount)

您可以使用集合的频率功能:


int executions=Collections.frequency(yourList,whatToCount)

您可以使用groupingBy和这样的计数来获得频率计数

List<Integer> factors = ...
Map<Integer, Long> factorCount = factors.stream()
                            .collect(Collectors.groupingBy(i -> i), Collectors.counting());
列出因素=。。。
Map factorCount=factors.stream()
.collect(Collectors.groupingBy(i->i),Collectors.counting());
在生成每个因素时,计算每个因素的数量将非常简单,而不是生成一个列表

public static void main(String... args) {
    System.out.println(factorise(2L*2*2*5*5*49*11));
}

static Map<Long, Integer> factorise(long value) {
   Map<Long, Integer> map = new LinkedHashMap<>();
   for (int i = 2; i * i <= value; i++) {
       while (value % i == 0) {
           map.merge((long) i, 1, (p, n) -> p == null ? n : p + n);
           value /= i;
       }
   }
   if (value > 1)
       map.put(value, 1);
   return map;
publicstaticvoidmain(字符串…参数){
System.out.println(factorse(2L*2*2*5*5*49*11));
}
静态映射因子(长值){
Map Map=newlinkedhashmap();
对于(int i=2;i*ip==null?n:p+n);
值/=i;
}
}
如果(值>1)
map.put(值1);
返回图;
}

印刷品


{2=3,5=2,7=2,11=1}

您可以通过使用groupingBy和这样的计数来获得频率计数

List<Integer> factors = ...
Map<Integer, Long> factorCount = factors.stream()
                            .collect(Collectors.groupingBy(i -> i), Collectors.counting());
列出因素=。。。
Map factorCount=factors.stream()
.collect(Collectors.groupingBy(i->i),Collectors.counting());
在生成每个因素时,计算每个因素的数量将非常简单,而不是生成一个列表

public static void main(String... args) {
    System.out.println(factorise(2L*2*2*5*5*49*11));
}

static Map<Long, Integer> factorise(long value) {
   Map<Long, Integer> map = new LinkedHashMap<>();
   for (int i = 2; i * i <= value; i++) {
       while (value % i == 0) {
           map.merge((long) i, 1, (p, n) -> p == null ? n : p + n);
           value /= i;
       }
   }
   if (value > 1)
       map.put(value, 1);
   return map;
publicstaticvoidmain(字符串…参数){
System.out.println(factorse(2L*2*2*5*5*49*11));
}
静态映射因子(长值){
Map Map=newlinkedhashmap();
对于(int i=2;i*ip==null?n:p+n);
值/=i;
}
}
如果(值>1)
map.put(值1);
返回图;
}

印刷品


{2=3,5=2,7=2,11=1}

如果要手动执行此操作,可以使用
for
循环和
映射:

//Get your list in the appropriate way
ArrayList list = getList();

//Make a HashMap
HashMap<int,int> map = new HashMap<>();

for (int i : list) {
    if (map.containsKey(i)) {
        map.put(i, map.get(i)+1);
    } else {
        map.put(i, 1);
    }
}
//以适当的方式获取您的列表
ArrayList=getList();
//制作一个HashMap
HashMap=newHashMap();
用于(int i:列表){
if(图1){
map.put(i,map.get(i)+1);
}否则{
图.put(i,1);
}
}

然后,您将拥有一个映射,该映射将
int
键与
列表中该
int
的出现次数相关联。如果您想手动执行此操作,可以使用
for
循环和
映射:

//Get your list in the appropriate way
ArrayList list = getList();

//Make a HashMap
HashMap<int,int> map = new HashMap<>();

for (int i : list) {
    if (map.containsKey(i)) {
        map.put(i, map.get(i)+1);
    } else {
        map.put(i, 1);
    }
}
//以适当的方式获取您的列表
ArrayList=getList();
//制作一个HashMap
HashMap=newHashMap();
用于(int i:列表){
if(图1){
map.put(i,map.get(i)+1);
}否则{
图.put(i,1);
}
}
然后,您将在
列表中有一个将
int
键与该
int
的出现次数相关的映射

您可以使用和包装模式来封装一组方法来计算素数以及其他内容

这与@Peter Lawrey的解决方案有点不同,因为它在jUnit框架和上使用单元测试。此解决方案可能有助于动态测试和检查方法是否正确计算

public class ComputePrime {

    public boolean isPrime(int n) {
        int i;
        for (i = 2; i <= n/2 ; i++) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    }

    public void throwExceptionIfIsNotPrime(int n){
        if(!isPrime(n))
            throw new IllegalStateException("It is not prime");
    }

    public List<Integer> generatePrime(int n){
        List<Integer> primes = new ArrayList<>();
        for (int i = 2; i <= n; i++) {
            if(isPrime(i))
                primes.add(i);
            else continue;
        }

        if(primes.isEmpty())
            return Collections.EMPTY_LIST;
        else return primes;
    }

    public List<Integer> dupPrimes(List<Integer> primes){
        primes.forEach( i-> throwExceptionIfIsNotPrime(i) );

        List<Integer> dupPrimes = new ArrayList<>();
        for (Integer prime : primes) {

            dupPrimes.add(prime);
            dupPrimes.add(prime);

        }
        return dupPrimes;
    }

    public List<Integer> dupRandonPrimes(List<Integer> primes){
        primes.forEach( i-> throwExceptionIfIsNotPrime(i) );

        List<Integer> dupPrimes = new ArrayList<>();
        for (Integer prime : primes) {
            dupPrimes.addAll(generatePrimeDup(prime));
        }
        return dupPrimes;
    }

    private Collection<? extends Integer> generatePrimeDup(final Integer prime) {
        final int n = ((int) (Math.random()*10) % 10) +1;
        List<Integer> dupPrimes = new ArrayList<>();

        for (int i = 0; i < n; i++) {
            dupPrimes.add(prime);
        }

        return dupPrimes;
    }

    public Map<Integer,Long> countPrimes(List<Integer> primes){
        Map<Integer,Long> primeOnMap = new HashMap<>();

        primes.forEach( i-> throwExceptionIfIsNotPrime(i) );

        for (Integer prime : primes) {
            long count = primes
                            .stream()
                            .filter(i -> i == prime)
                            .count();

            primeOnMap.put(prime, count);
        }
        return primeOnMap;
}}
公共类ComputePrime{
公共布尔iPrime(int n){
int i;
对于(i=2;i通过ExceptionIFisnotTime(i));
List dupPrimes=new ArrayList();
for(整数素数:素数){
addAll(generatePrimeDup(prime));
}
返回素数;
}
私有集合您可以使用和包装器模式来封装一组方法来计算素数以及其他内容

这与@Peter Lawrey的解决方案有点不同,因为它在jUnit框架和上使用了一个单元测试。这个解决方案可能有助于动态测试和检查方法的计算是否正确

public class ComputePrime {

    public boolean isPrime(int n) {
        int i;
        for (i = 2; i <= n/2 ; i++) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    }

    public void throwExceptionIfIsNotPrime(int n){
        if(!isPrime(n))
            throw new IllegalStateException("It is not prime");
    }

    public List<Integer> generatePrime(int n){
        List<Integer> primes = new ArrayList<>();
        for (int i = 2; i <= n; i++) {
            if(isPrime(i))
                primes.add(i);
            else continue;
        }

        if(primes.isEmpty())
            return Collections.EMPTY_LIST;
        else return primes;
    }

    public List<Integer> dupPrimes(List<Integer> primes){
        primes.forEach( i-> throwExceptionIfIsNotPrime(i) );

        List<Integer> dupPrimes = new ArrayList<>();
        for (Integer prime : primes) {

            dupPrimes.add(prime);
            dupPrimes.add(prime);

        }
        return dupPrimes;
    }

    public List<Integer> dupRandonPrimes(List<Integer> primes){
        primes.forEach( i-> throwExceptionIfIsNotPrime(i) );

        List<Integer> dupPrimes = new ArrayList<>();
        for (Integer prime : primes) {
            dupPrimes.addAll(generatePrimeDup(prime));
        }
        return dupPrimes;
    }

    private Collection<? extends Integer> generatePrimeDup(final Integer prime) {
        final int n = ((int) (Math.random()*10) % 10) +1;
        List<Integer> dupPrimes = new ArrayList<>();

        for (int i = 0; i < n; i++) {
            dupPrimes.add(prime);
        }

        return dupPrimes;
    }

    public Map<Integer,Long> countPrimes(List<Integer> primes){
        Map<Integer,Long> primeOnMap = new HashMap<>();

        primes.forEach( i-> throwExceptionIfIsNotPrime(i) );

        for (Integer prime : primes) {
            long count = primes
                            .stream()
                            .filter(i -> i == prime)
                            .count();

            primeOnMap.put(prime, count);
        }
        return primeOnMap;
}}
公共类ComputePrime{
公共布尔iPrime(int n){
int i;
对于(i=2;i通过ExceptionIFisnotTime(i));
List dupPrimes=new ArrayList();
for(整数素数:素数){
addAll(generatePrimeDup(prime));
}
返回素数;
}
私人收藏