今天在登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的空间,以腾讯的财力完全可以负担几十亿的账号,而且这种方法比查询内存不知道快多少倍。。