package htmlunit;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Comparator;
public class MapSort {
/**
* 传入一个字符串数组 统计字符串出现次数 并按出现的次数 由高到低排序 输出
*
* @param content
* @return
*/
public static String[] counter(String[] content) {
int counter = 0;
Map<String, Integer> map = new HashMap<String, Integer>();
for (int i = 0; i < content.length; i++) {
if (map.containsKey(content[i])) {
counter = map.get(content[i]);
map.put(content[i], ++counter);
} else {
map.put(content[i], 1);
}
}
@SuppressWarnings("rawtypes")
Map.Entry[] set = MapSort.getSortedHashtableByValue(map);
String[] str = new String[set.length];
for (int i = 0; i < str.length; i++) {
str[i] = set[i].getKey().toString();
}
return str;
}
/**
* @param h
* @return 实现对map按照value降序排序
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public static Map.Entry[] getSortedHashtableByValue(Map h) {
Set set = h.entrySet(); //返回此映射中包含的映射关系的 Set 视图
Map.Entry[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set.size()]); //返回一个包含set中所有元素的数组
Arrays.sort(entries, new Comparator() { //实现entries按Value降序排序
public int compare(Object arg0, Object arg1) {
Long key1 = Long.valueOf(((Map.Entry) arg0).getValue()
.toString());
Long key2 = Long.valueOf(((Map.Entry) arg1).getValue()
.toString());
return key2.compareTo(key1);
}
});
return entries;
}
// public static void main(String[] args) throws Exception {
//
// Indexcs index = new Indexcs();
//
// String b="通过Buffer的部分引用,我们可以得到矩阵的部分引用,比如我们可以利用这个来获取一个像素点的数据数组,而改变这个数组中的值," +
// "相应的矩阵数据也会改变;再比如我们可以以其他数据类型的方式读取数据。而这些对于普通Array是不能实现的。下面我们来看一下at方法的实现";
// System.out.println(b);
// System.out.println("===========================================");
// String [] a =index.analyze(b);
//
// for(int i=0;i<a.length;i++)
// {
// System.out.print(a[i]+" ");
// }
// System.out.println();
// System.out.println("==========================================");
// String []value=MapSort.counter(a);
// for(int i=0;i<value.length;i++)
// {
// System.out.print(value[i]+" ");
// }
// }
}