java-bitset实践

        今天在登qq的时候,突然想到腾讯会怎么判断我们在不在线,会从数据库里面查嘛,貌似太笨了。

         bitset位图应该是一个比较不错的方法。  

         文件test里有1亿个数,将他们都放入到bitmap中,然后查询相应数字是否存在。

          

public static void main(String[] args) {
		// TODO Auto-generated method stub
//		write("d:/test.txt", "test");
		Runtime run = Runtime.getRuntime();
		long total1 = run.freeMemory();
//		read("d:/test.txt");
		int j = 0;
		while(j < 100000000){
			bit.set(j++);
		}
		long total2 = run.freeMemory();
		System.out.println("初始化完成,1亿位图消耗内存为"+(total1 - total2)/1024/1024+"M");
		System.out.println("输入你的操作,-1退出,-2下线帐号,-3上线帐号,其他表示查询帐号");
		Scanner in = new Scanner(System.in);
		String word = in.nextLine();
		while(!"-1".equals(word)){
			if("-2".equals(word)){
				System.out.println("输入要下线的帐号:");
				word = in.nextLine();
				int i = Integer.parseInt(word);
				bit.set(i, false);
			}else if("-3".equals(word)){
				System.out.println("输入要上线的帐号:");
				word = in.nextLine();
				int i = Integer.parseInt(word);
				bit.set(i, true);
			}else{
				System.out.println("输入要查询的帐号:");
				word = in.nextLine();
				int i = Integer.parseInt(word);
				System.out.println(bit.get(i));
			}
			System.out.println("输入你的操作,-1退出,-2下线帐号,-3上线帐号,其他表示查询帐号");
			word = in.nextLine();
		}
	}

 结果:

初始化完成,1亿位图消耗内存为35M
输入你的操作,-1退出,-2下线帐号,-3上线帐号,其他表示查询帐号
1
输入要查询的帐号:
3
true
输入你的操作,-1退出,-2下线帐号,-3上线帐号,其他表示查询帐号
-2
输入要下线的帐号:
3
输入你的操作,-1退出,-2下线帐号,-3上线帐号,其他表示查询帐号
3
输入要查询的帐号:
3
false
输入你的操作,-1退出,-2下线帐号,-3上线帐号,其他表示查询帐号
-3
输入要上线的帐号:
3
输入你的操作,-1退出,-2下线帐号,-3上线帐号,其他表示查询帐号
3
输入要查询的帐号:
3
true
输入你的操作,-1退出,-2下线帐号,-3上线帐号,其他表示查询帐号
-1

 1亿个帐号,只用了30多M的空间,以腾讯的财力完全可以负担几十亿的账号,而且这种方法比查询内存不知道快多少倍。。      

猜你喜欢

转载自709002341.iteye.com/blog/2257452