java中从1000万个随机数中查找出相同的10万个随机数花的最少时间
2017-07-18 13:44
501 查看
偶然在群里看到有人问到大数据查询,自己也就想了小艾改如何解决,从从1000万个随机数中查找出相同的10万个随机数花的最少时间,
谈到效率,自然是hashmap莫属。
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class dataTest {
private static final int [] datas = new int [1000 * 10000]; //1000万个随机数
private static final int [] params = new int [10 * 10000]; // 10万个随机数
private static final Map<Integer, Integer> map = new HashMap<Integer, Integer>();
private static final Random random = new Random(System.currentTimeMillis());
static {
int length = datas.length;
//初始化1000万个数字
for(int i = 0; i < datas.length ; i ++){
int data = random.nextInt(datas.length);
datas[i] = data;
}
//初始化10万个要查询的数字
for(int i = 0; i < params.length; i ++){
int param = random.nextInt(params.length);
params[i] = param;
}
long begin = System.currentTimeMillis();
// 原始数组转map
for (int i = 0; i < datas.length ; i++){
Integer index = map.get(datas[i]);
if(index == null){
map.put(datas[i], i);
}
else if(i < index)
{
map.put(datas[i], i);
}
}
long end = System.currentTimeMillis();
System.out.println("int 数组 转map花了" + (end -begin) + "毫秒");
}
public void testLong(){
long begin = System.currentTimeMillis();
int exist = 0; //下标找到了
int noteexist = 0; //下标没找到
for (int i = 0; i < params.length ; i++){
Integer index = map.get(params[i]);
if(index == null){
noteexist++;
}
else if(i < index)
{
exist++;
}
}
long end = System.currentTimeMillis();
System.out.println("下标找到了:" + exist +"个");
System.out.println("下标没找到:" + noteexist + "个");
System.out.println("查询耗时:" + (end - begin) + "毫秒");
}
public static void main(String[] args){
dataTest dt = new dataTest();
dt.testLong();
}
}
谈到效率,自然是hashmap莫属。
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class dataTest {
private static final int [] datas = new int [1000 * 10000]; //1000万个随机数
private static final int [] params = new int [10 * 10000]; // 10万个随机数
private static final Map<Integer, Integer> map = new HashMap<Integer, Integer>();
private static final Random random = new Random(System.currentTimeMillis());
static {
int length = datas.length;
//初始化1000万个数字
for(int i = 0; i < datas.length ; i ++){
int data = random.nextInt(datas.length);
datas[i] = data;
}
//初始化10万个要查询的数字
for(int i = 0; i < params.length; i ++){
int param = random.nextInt(params.length);
params[i] = param;
}
long begin = System.currentTimeMillis();
// 原始数组转map
for (int i = 0; i < datas.length ; i++){
Integer index = map.get(datas[i]);
if(index == null){
map.put(datas[i], i);
}
else if(i < index)
{
map.put(datas[i], i);
}
}
long end = System.currentTimeMillis();
System.out.println("int 数组 转map花了" + (end -begin) + "毫秒");
}
public void testLong(){
long begin = System.currentTimeMillis();
int exist = 0; //下标找到了
int noteexist = 0; //下标没找到
for (int i = 0; i < params.length ; i++){
Integer index = map.get(params[i]);
if(index == null){
noteexist++;
}
else if(i < index)
{
exist++;
}
}
long end = System.currentTimeMillis();
System.out.println("下标找到了:" + exist +"个");
System.out.println("下标没找到:" + noteexist + "个");
System.out.println("查询耗时:" + (end - begin) + "毫秒");
}
public static void main(String[] args){
dataTest dt = new dataTest();
dt.testLong();
}
}
相关文章推荐
- java中从1000万个随机数中查找出相同的10万个随机数花的最少时间
- java 利用二进制位进行标记,获取不相同的随机数
- 初学java:在数组中存放10个随机数,输出数组并查找该数组中最小值
- 让random在 4000 极短时间内产生的随机数不相同
- java 文件压缩 base64加解密 生成指定随机数 时间换算 获取系统 获取mac等小结
- java获取以时间为种子的随机数
- Java____随机数+时间戳+拼接=图片命名
- java中hashmap容器实现查找O(1)时间复杂度的思考
- Java数组排序基础算法,二维数组,排序时间计算,随机数产生
- Java数组排序基础算法,二维数组,排序时间计算,随机数产生
- JAVA 时间戳+随机数生成唯一ID
- 两个有n个数的整数数组,都排好序了。 用O(n)的时间查找两个数组是否有相同的数字。
- java.unit工具类的使用(Arrays类进行排序,查找;Random生成随机数)
- Java数组排序基础算法,二维数组,排序时间计算,随机数产生
- Java小例程------实现对象存入集合中、遍历、随机数做索引在集合中查找
- 面试笔试(一):平衡二叉树,Java正则验证,List查找时间复杂度,ORM框架的选择
- Java之随机数/时间/Math类
- java 判断两个字符串是否由相同的字符组成 排序算法 空间换时间的方法
- 黑马程序员-JAVA基础面试-获取10个1-20 的随机数,要求获取的随机数不能相同!
- Java—以当前系统时间生成随机数