一个有N个元素的集合,其中有相同元素。 需要得到按重复元素多少排序的新集合。
2015-04-17 09:34
525 查看
一个有N个元素的集合,其中有相同元素。
需要得到按重复元素多少排序的新集合。
{"a","b","c","c","a","c"}
得到
{"c","a","b"}
需要得到按重复元素多少排序的新集合。
{"a","b","c","c","a","c"}
得到
{"c","a","b"}
import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; public class Test8 { /** * @param args */ public static void main(String[] args) { String[] arr={"a","b","c","c","a","c"}; Map<String,Integer> map = new HashMap<String,Integer>(); MyValueComparator vc = new MyValueComparator(map); Map<String,Integer> map1 = new TreeMap<String,Integer>(vc); for(int i=0;i<arr.length;i++){ String str1=arr[i]; if(map.containsKey(str1)){ map.put(str1, map.get(str1).intValue()+1); } else{ map.put(str1, 1); } } map1.putAll(map); Object[] strArray_new = (Object[])map1.keySet().toArray(); System.out.println("原来的数组:"+Arrays.toString(arr)); System.out.println("处理后的数组:"+Arrays.toString(strArray_new)); } } class MyValueComparator implements Comparator<String> { Map<String, Integer> map; public MyValueComparator(Map<String, Integer> map) { this.map = map; } public int compare(String a, String b) { if (map.get(a) >= map.get(b)) { return -1; } else { return 1; } } }
采用两个map去实现,第一次以数组元素作为key,出现的次数作为value,这样得到的结果是无序的,但数据时整合过的;然后在用一个有序的map(TreeMap),对原来的map进行反序(即,把第一个map中的key作为第二个map的value,把第一个map中的value作为第二个map的key),这样就得到了有序的排列,然后输出values就可以了。 具体代码(核心的代码也就15行不到): public static void sort(List<String> list) { Map<String, Integer> map = new HashMap<String, Integer>(); for (int k = 0; k < list.size(); k++) { if (k == 0) { map.put(list.get(k), 1); continue; } if (map.keySet().contains(list.get(k))) { map.put(list.get(k), (map.get(list.get(k))) + 1); } else { map.put(list.get(k), 1); } } /** * 以上执行完以后,对value-key反序 */ Map<Integer, String> tree = new TreeMap<Integer, String>();// 这个map是有序的 Iterator<String> it = map.keySet().iterator(); while (it.hasNext()) { String key = it.next(); tree.put(map.get(key), key); } System.out.println("------" + tree.values()); }
相关文章推荐
- 编程产生一个int数组,长度为30,并向其中随机插入1-30,并且不能重复输出数组。实现一个冒泡排序算法对其进行排序,输出排序结果
- List集合中删除属性(一个或者多个属性)相同的对象返回List且根据对象属性进行排序输出
- 一集合指定元素组合的条件,求出集合中有多少对组合,集合的元素不重复使用。
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右),某一个元素也加一,现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
- 面试题: 已知一个含有n个不同元素的集合,要求打印其所有具有k个元素的子集(不允许有重复的)
- 一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。
- 将集合中的重复的元素只保留一个
- java怎么判断两个Set 里的对象的值是否相同【两个set中的值是否相等】、java treeset和hashset如何判断元素是否相同【即对象是否完全相同;利用一个set去除重复元素】
- 小明买了一些彩色的气球用绳子串在一条线上,想要装饰房间,每个气球都染上了一种颜色,每个气球的形状都是各不相同的。我们用1到9一共9个数字表示不同的颜色,如12345则表示一串5个颜色各不相同的气球串。但小明希望得到不出现重复颜色的气球串,那么现在小明需要将这个气球串剪成多个较短的气球串,小明一共有多少种剪法?如原气球串12345的一种是剪法是剪成12和345两个气球串。
- 有12个球,外形相同,其中一个小球的质量与其他11个不同,给一个天平,需要几次把这个小球找出来并且求出这个小球是比其他的轻还是重
- 有3个集合, 从其中一个集合中删除同时存在于另外两个集合的元素
- java找出2个集合或数组相同和不同的元素(以及去除List中的重复元素)
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右),某一个元素也加一,现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
- java如何快速得到一个数组里面有多少种元素?
- SQL SERVER 2005 中,对两集合中有多少相同元素的检测
- 求一个数组中重复元素出现最多值,最大的元素及出现次数,次数相同时,取最大值,优先考虑次数
- hdu 3529 Bomberman - Just Search 重复覆盖+DLX 炸弹人游戏中,问最少需要放多少颗炸弹,才能够将所有的墙壁炸掉,其中,炸弹在同一时间引爆
- (原创)扩展方法:给 IEnumerable<T> 扩展一个得到重复元素的方法
- 写一个快排序,堆排序需要多少时间?
- 取值为[1,n-1]含n个元素的整数数组,至少存在一个重复数,即可能存在多个重复数,O(n)时间内找出其中任意一个重复数,不使用额外存储空间。