Java - 在数组中查找重复的元素并将它们显示为子数组

时间:2017-01-23 16:55:23

标签: java arrays

我需要找到所有重复的数组元素并将它们显示为单独的子数组。像这样:

数组= {1,7,4,3,5,5,2,1,1,8,9,8,0,1,1,2}

  1. Array0 = {0}
  2. Array1 = {1,1,1,1,1}
  3. Array2 = {2,2}
  4. Array3 = {3}
  5. Array4 = {4}
  6. ...等...

    我做了什么:

    • 生成数组
    • 按升序排序

    我试图找出,如何通过排序数组进行循环并将其拆分为包含重复元素的单独子数组。

3 个答案:

答案 0 :(得分:0)

如果您知道值的范围,则可以创建另一个数组并将值添加到相应的数字。但是正如使用HashMap提到的那样会容易得多。

答案 1 :(得分:0)

您可以使用下面的通用方法来分离重复的项目:

public static <T> HashMap<T, List<T>> getDuplicates(T[] array){
    HashMap<T, List<T>> result = new HashMap<T, List<T>>();
    for(T item : array){
        List<T> duplicates = result.get(item);
        if(duplicates == null)
            result.put(item, duplicates = new ArrayList<T>());
        duplicates.add(item);
    }
    return result;
}

接下来,您可以按方法对结果集合进行排序:

public static <T extends Comparable<T>> List<List<T>> getSorted(HashMap<T, List<T>> groups){
    List<List<T>> sortedGroups = new ArrayList<>(groups.values());
    Collections.sort(sortedGroups, new Comparator<List<T>>() {
        @Override
        public int compare(List<T> g1, List<T> g2) {
            if(g1.isEmpty())
                return -1;
            else if(g2.isEmpty())
                return 1;
            else 
                return g1.get(0).compareTo(g2.get(0)); 
        }
    });
    return sortedGroups;
}

答案 2 :(得分:0)

只使用数组和Arraylists。

我创建了另一个数组arr2 []作为此数组的副本,并开始比较所有值。 结果将添加到临时Arraylist中,该Arraylist将添加到主输出集合Arraylist<ArrayList<Integer>

import java.util.ArrayList;
import java.util.Arrays;

public class temp
{
    public static void main (String[] args) throws java.lang.Exception
    {
        int arr[]=  {1,7,4,3,5,5,2,1,1,8,9,8,0,1,1,2};
        int arr2[]= Arrays.copyOf(arr,arr.length);


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

        System.out.println(Arrays.toString(arr));

        for (int i = 0; i < arr.length; i++) {
        ArrayList<Integer> tempArr = new ArrayList<Integer>();
        int count=0;
        for (int j = 0; j < arr2.length; j++) {

            if(arr[i]==arr2[j] &&arr2[j]!=-1)
            {   tempArr.add(arr[i]);
                arr2[j]=-1;
            }
        }
        if(tempArr.size()>1) arrList.add(tempArr);
    }

    for(ArrayList c: arrList)
    {           
        System.out.println(c);
    }

}




}  

输出:

[1, 7, 4, 3, 5, 5, 2, 1, 1, 8, 9, 8, 0, 1, 1, 2]
[1, 1, 1, 1, 1]
[5, 5]
[2, 2]
[8, 8]