Java:重复元素排序

其实很简单的一个题,竟然想了有一个多小时,实在纳闷,为啥Map不能按照value排序(要是可以的话,估计早就解答出来了……),不过也还好,最后还是思索出来了.下面看题:

一个有N个元素的集合,其中有相同元素。
需要得到按重复元素多少排序的新集合。
{“a”,”b”,”c”,”c”,”a”,”c”}
得到
{“c”,”a”,”b”}
有啥好算法?

在没看到后面之前,我以为只是要排序输出字符在数组里面出现了几次。想想就觉得好简单,可是看完后面的。。。。。。才发现完全石化啊!不过每一个难题都是进步呢,加油!

java标志
image-2262

源代码

请在Jdk 1.8 环境下运行!!!


/**
* Created by puruidong on 2015/4/2.
*/
public class TestDemo {
public static void main(String[] args) {
String [] arrays = {"a","b","c","c","a","c","dsa","a","d","k","z","r","z","a","bc","r","a","c"};
/*太懒,直接就list遍历输出吧.*/
Arrays.asList(showCopyNum(arrays)).forEach((x)->{System.out.println(x);});
/*
* 下面是返回回来的数组.
showCopyNum(arrays);
*/
}

/**
一个有N个元素的集合,其中有相同元素。
需要得到按重复元素多少排序的新集合。
{"a","b","c","c","a","c"}
得到
{"c","a","b"}
有啥好算法?

* @param array 数组.
* @return
*/
private static Object[] showCopyNum(String[] array){
Set set = new HashSet<>();
Map maps = new TreeMap<>();
for (String str:array)
maps.put(str,(set.add(str)?1:maps.get(str)+1));
//下面这一句的大意是:取map的value进行排序,然后输出数组并返回,没有了?嗯。没有了..
return maps.entrySet().stream().sorted(new Comparator>() {
@Override
public int compare(Map.Entry o1, Map.Entry o2) {return o2.getValue().compareTo(o1.getValue());}}).toArray();
}
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据