JAVA 去掉重复的数据

Python010

JAVA 去掉重复的数据,第1张

无非就是检查是否已经有数据的问题,用List做可能比较简单点

public class SigleList{

    List<Integer> nums

    

    public SingleList(){

        nums = new ArrayList<Integer>()

    }

    

    public void add(Integer num){

        if(!checkNumExist){

            nums.add(num)

        }

    }

    

    public boolean checkNumExist(Integer){

        return nums.contains(Integer)

    }

}

这个SingleList就简单实现了去重增加,可以用它来读数据

public class Test{

    public static void main(String[] args){

        SingleList nums = new SingleList()

    

        // 产生100个数据

        for(int i = 0 i++ i < 100){

            // 产生随机数

            Integer num = new Random().nextInt(100000)

            nums.add(num)

        }

        

        foreach(Integer num : nums){

            System.out.println(num)

        }

    }

}

这题考的是大数据去重,数据量大于内存,即无法直接在内存中去重,那么有两个方案:

1、内存外去重

也就是将数据存入数据库,然后利用数据库进行排序并去重。

优缺点:

1)优点:简单直接

2)缺点:消耗大

2、算法去重

题目中说明是20G数据,假设每行数据是1k,则数据行数是20M(如果每行数据是512字节,则数据行数是40M),可使用MD5对每行数据进行映射,获得16字节映射吗,即总共需要内存空间320M(或640M),满足内存内去重的需求。

优缺点:

1)优点:在内存内进行处理,速度明显比内存为要快。

2)缺点:需要进行额外的编码,程序复杂度和效率要求较高。

List<String> list = new ArrayList<>()

/*list.add("abc")

list.add("abc")

list.add("def")

list.add("bcd")*/

Set<String> set = new LinkedHashSet<>()//这种方式保证去重后的元素相对位置不变

//Set<String> set = new HashSet<>()//这种方式去重后元素的位置很有可能变化了

set.addAll(list)

list.clear()

list.addAll(set)

for(String s : list){

System.out.println(s)

}

整个思路就是利用set中的元素是不重复的,来达到去重的目的