场景:对List中的数组指定索引进行分组
方法一: 这个方法效率较高
**
* 对指定集合进行分组
* @param list
* @param index 索引、从0开始。
* @return
*/
public static List<List<Object[]>> groupList(List<Object[]> list,int index){
if(list==null)
return null;
Map<Object, List<Object[]>> map =new HashMap<Object, List<Object[]>>();
for (int i = 0; i < list.size(); i++) {
Object key=map.get(list.get(i)[index].toString());
List<Object[]> temp=null;
if(key==null){
temp=new ArrayList<Object[]>();
temp.add(list.get(i));
map.put(list.get(i)[0].toString(), temp);
}
else{
temp=(ArrayList<Object[]>)map.get(list.get(i)[index].toString());
temp.add(list.get(i));
map.put(list.get(i)[0].toString(), temp);
}
}
if(map==null)
return null;
Iterator it= map.keySet().iterator();
Object obj=null;
List<List<Object[]>> resList=new ArrayList<List<Object[]>>();
while (it.hasNext()) {
obj=it.next();
if(obj!=null)
resList.add(map.get(obj));
}
return resList;
}
方法二:这个方法的效率很低(使用迭代的方法)
public List<List<Object[]>> GetGroupList = new ArrayList<List<Object[]>>();
/**
* @deprecated
* @param arrayList
* @param index
* @return
*/
public List<Integer[]> executeGroupList(List<Object[]> arrayList,int index) {
if (arrayList == null || arrayList.size() == 0)
return null;
List<Object[]> sameList = new ArrayList<Object[]>();
List<Object[]> diffList = new ArrayList<Object[]>();
sameList.add(arrayList.get(0));
arrayList.remove(0);
for (int i = 0; i < arrayList.size(); i++) {
if (arrayList.get(i)[index].toString().equals(
sameList.get(0)[index].toString())) {
sameList.add(arrayList.get(i));
} else {
diffList.add(arrayList.get(i));
}
}
GetGroupList.add(sameList);
if (!diffList.isEmpty()) {
executeGroupList(diffList,index);
}
return null;
}
数据量在20W左右时,方法一的效率大大超过方法二,两方法执行时间相差3.9倍左右。
代码还有很多不足之处,欢迎大家批评指正
Java高级群:224651178