java 从几十万条数据的list集合中随机取出1000个元素重新生成集合?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 从几十万条数据的list集合中随机取出1000个元素重新生成集合?相关的知识,希望对你有一定的参考价值。
java 从几十万条数据的list集合中随机取出1000个元素重新生成集合,要求速度比较快。
参考技术A List<String> list = new ArrayList<String>();List<String> new_list = new ArrayList<String>();
for (int i = 0 ; i < 1200000;i++)
list.add(i+"");
long time1 = System.currentTimeMillis();
Collections.shuffle(list);
new_list = list.subList(0,1000);//方法1耗时65~130
new_list = createRandomList(list,1000);//方法2耗时2~5
long time2 = System.currentTimeMillis();
System.out.println(time2 - time1);
private static List createRandomList(List list, int n)
Map map = new HashMap();
List listNew = new ArrayList();
if (list.size() <= n)
return list;
else
while (map.size() < n)
int random = (int) (Math.random() * list.size());
if (!map.containsKey(random))
map.put(random, "");
listNew.add(list.get(random));
return listNew;
这个方法测试 参考技术B package test2;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
public class test2_test1
static HashSet<Object> hashSet1 = new HashSet<>();
static List<Object> list = new ArrayList<>();
static HashSet<Integer> getObject(int i)
HashSet<Integer> hashSet = new HashSet<>(i);
int random = (int)Math.random() * list.size();
while (hashSet.size() < i)
hashSet.add(random);
random = (int)Math.random() * list.size();
return hashSet;
//获取指定范围内无重复数字(list索引)
static void addObject(int i1)
for (int i : getObject(i1))
hashSet1.add(list.get(i));
//获取hashset的值以获取list的指定索引位置值,将该值添加到新的集合中
public static void main(String[] args)
addObject(1000);
以上是关于java 从几十万条数据的list集合中随机取出1000个元素重新生成集合?的主要内容,如果未能解决你的问题,请参考以下文章
实现java 中 list集合中有几十万条数据,每100条为一组取出