1.前言。
如题。有两种做法,做法2比做法1要好。
2.做法
(1)将数组变为Collection
Map<byte[], List<Test>> results = null;//定义一个集合的集合
Collection<List<Test>> collection = results.values();
(2)将集合转化为数组,这样每个数组就是一个集合了。
引用
Object[] list2 = collection.toArray();
(3)遍历集合的集合
long total=0;//集合数据总数
for (int i = 0; i < list2.length; i++) {
List<Test> object = (List<Test>) list2[i];
total = total + object.size();
}
3.做法2。
做法1中的步骤2其实可以优化,我们直接将list进行merge,再排序.例子如下:
(1)Test类
package com.ljn.entity;
public class Test {
private long id;
public Test(long id) {
this.id = id;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
(2)自定义排序类,这个
package com.ljn.entity;
import java.util.Comparator;
/**
* 对Step类进行排序
*
* @author Administrator
*
*/
public class MyComparator implements Comparator<Test> {
/**
* 如果o1小于o2,返回一个负数;如果o1大于o2,返回一个正数;如果他们相等,则返回0;
*/
@Override
public int compare(Test t1, Test t2) {
long id1 = t1.getId();
long id2 = t2.getId();
if (id1 > id2) {
return 1;
} else if (id1 == id2) {
return 0;
} else {
return -1;
}
}
}
(3)对List进行merge和排序,这样基本是最快了,如果还有更快的,请留言。
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.ljn.entity.MyComparator;
import com.ljn.entity.Test;
public class CollectionTest {
public static void main(String[] args) {
// Collection<List> collection=Collections.a;
List List1 = new ArrayList();
List List2 = new ArrayList();
List1.add(new Test(1));
List1.add(new Test(2));
List1.add(new Test(3));
List1.add(new Test(4));
List2.add(new Test(5));
List2.add(new Test(5));
List2.add(new Test(6));
List2.add(new Test(7));
List2.add(new Test(8));
Map<byte[], List<Test>> results = new HashMap();
results.put("1".getBytes(), List1);
results.put("2".getBytes(), List2);
Collection<List<Test>> collection = results.values();
List list = new ArrayList();
Iterator it=results.entrySet().iterator();
while(it.hasNext()){
Map.Entry entry = (Map.Entry) it.next();
List<Test> li=(List<Test>)entry.getValue();
list.addAll(li);
}
//list.addAll(collection);
for (int i = 0; i < list.size(); i++) {
System.out.println(((Test)list.get(i)).getId());
}
Collections.sort(list, new MyComparator());
for (int i = 0; i < list.size(); i++) {
System.out.println(((Test)list.get(i)).getId());
}
}
}
分享到:
相关推荐
java数组排序的思想,过程和代码实现。多种数组排序的方法,主要有冒泡排序,堆排序,插入排序, 归并操作(merge), 归并操作(merge),选择排序,希尔排序。
Merge Sorted Array 合并 排序 数组 leetcode
然后,我们使用array_merge函数将这两个数组组合成一个新的数组,并使用foreach循环遍历数组,将数组1中的元素设置为红色,数组2中的元素设置为蓝色,并输出结果。 需要注意的是,我们使用了in_array函数来判断一个...
遇到问题:把两个数组用php自带的array_merge()函数合并之后,想按照两个数组中共有的’post_time’字段为新数组进行排序 解决办法:通过查阅官方手册,得知有array_multisort()这个函数,可以对多个数组或多维数组...
NULL 博文链接:https://lisajoy512.iteye.com/blog/1253680
leetcode二维数组合并 k 个排序列表 #23 什么是分而治之的算法? 问题是什么? 看问题。 运行时和空间复杂度 mergeKLists()的运行时间为0(n*m)因为它...因此,此实现的空间复杂度是未排序二维数组中元素总数的两倍。
两个集合比较(重新生成:新增集合、编辑集合、删除集合)
mergeSort 方法实现了归并...它借助两个辅助数组 leftArray 和 rightArray,将原数组中的元素按大小顺序放入这两个数组,并根据比较结果依次选择较小的元素放入原数组中。最后,将剩余未处理的元素放入原数组中即可。
要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条。 遇到这个要求的时候就不是 ORDER BY 能解决的问题了。因此翻看 PHP 手册查找到了如下方法,做...
Java中常见的排序算法有以下几种: 冒泡排序(Bubble Sort):通过比较相邻元素的大小,将较大的元素逐渐向后移动,直到整个序列有序。 选择排序(Selection Sort):每次遍历数组,找到最小(或最大)的元素,将其...
//初始化数组 void print_A(int A[],int p,int r);//打印数组元素 void merge(int A[],int p,int q,int r);//合并排序算法 /************合并排序算法的实现******************/ int main() { int p,q,r; ...
在Java实现中,归并排序通过递归调用mergeSortHelper方法将数组划分为更小的子数组,并在最后使用merge方法将有序子数组合并成一个完整的数组。归并排序虽然需要额外的空间来存储临时数组,但其稳定的性能和可并行化...
key_exists -- 检查给定的键名或索引是否存在于数组中 array_keys -- 返回数组中所有的键名 array_map -- 将回调函数作用到给定数组的单元上 array_merge_recursive -- 递归地合并一个或多个数组 array_merge -- ...
WinMerge(java代码比较工具),相当好用,可以用来比较两个java代码的不同的地方,在java开发过程中给你解决寻找两个同名文件不同之处的烦恼!用法简单!
C#,单向链表(Simply Linked List)的归并排序(Merge Sort)算法与源代码 归并排序法(3Merge Sort,以下简称MS)是分治法思想运用的一个典范。 其主要算法操作可以分为以下步骤: Step 1:将n个元素分成两个含n/...
归并排序(Merge Sort):采用分治法,将待排序数组递归地分成两部分,分别进行排序,然后合并两个有序数组。 选择排序(Selection Sort):每次从未排序的部分选出最小(或最大)的元素,放到已排序部分的末尾。 ...
给初学者学习算法用,用java实现的排序算法,包括二路归并和插入排序。
线性表的合并,两个线性表按非递减顺序排列,将他们和为一个线性表,要求也按非递减排列。
java调用gdal实现图像合并,参考功能gdal_merge.py
全部合并 合并数组中的所有对象安装使用安装merge-all : npm install --save merge-all用法模块使用var mergeAll = require ( 'merge-all' ) ;mergeAll ( [ { a : { b : 1 } , c : { d : 1 } } , { a : { b : 2 } ,...