大数据量(10亿)的整数看是否有重复的
使用BitMap:用位存储每个数,比如1,2,3....,31,32这32个数那么可以用一个32位的int值state来存,1存到int的最低位bit位上,32则存到最高位的bit位上;比如检测5是否存在,那么看int值得第5位是否是1,也就是state>>(5-1) & 1,看是不是为1,如果为1,说明5存在,否则不存在,同时将5加进去。
java实例代码:
package cn.wzy.Collection;import java.util.HashMap;
import java.util.Random;public class BitMap {static int[] map = new int[500];static boolean add(int now) {int index = now / 32;//得到存储数int bit = now % 32;//得到第几位if (bit == 0) {index--;bit = 32;}bit--;boolean res = (map[index] >> bit & 1) == 1;map[index] = map[index] | (1 << bit);return res;}public static void main(String[] args) {Random random = new Random();HashMap hashMap = new HashMap<>();for (int i = 0; i < 5000; i++) {int num = random.nextInt(32 * 500) + 1;System.out.println("the answer is : " + (add(num) == hashMap.containsKey(num)));hashMap.put(num,1);}}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
