java容器排序(sort)
java sort
关于Java容器,可以看这篇文章:https://www.cnblogs.com/jiading/articles/12411238.html
我们在这篇文章中对所有的容器类的实现类和数组的sort方法进行分析,它们分别是:

1)collection: ArrayList,LinkedLsit,Vector,Stack
TreeSet,HashSet,LinkedHashSet
- Map: HashMap,LinkedHashMap,WeakHashMap, TreeMap, HashTable, IdentityHashTable(其中 key 的比较是通过 == 而不是 equals)
3)数组:int[]
-
对于List的实现类:ArrayList\LinkedList\Vector\Stack,都有.sort()方法,可以直接调用。Collections包下也提供了静态的sort方法,可以使用Collections.sort()调用,但是它的实现是:
public static <T extends Comparable<? super T>> void sort(List<T> list) { list.sort((Comparator)null); }所以和直接调用list对象的sort方法没区别
-
HashSet和LinkedHashSet不可排序,他们两个的区别是HashSet中元素是无顺序的,而LinkedHashSet中元素是和插入顺序一致的
-
TreeSet是默认排序的,默认还是字典序,如果不是可以用字典序排序的元素或者不想用字典序排序,可以在构造的时候传入Comparator对象:
Set<String> sortSet = new TreeSet<String>(new Comparator<String>() { @Override public int compare(String o1, String o2) { return o2.compareTo(o1);//降序排列 } }); -
HashMap和LinkedHashMap同样不可排序,和HashSet和LinkedHashSet一样,LinkedHashMap同样记录了插入顺序
-
Map的排序一般使用TreeMap,它默认也是字典序,也可以通过在构造时传入Comparator对象来改变排序规则
Map<String, String> map = new TreeMap<String, String>( new Comparator<String>() { public int compare(String obj1, String obj2) { // 降序排序 return obj2.compareTo(obj1); } });上面是通过key排序,但有时候我们需要通过value排序,这是没有支持的方法的,需要我们自己构造,构造的原理就是先将其取出来放到List中,再自定义排序规则对List进行排序,最后再放回Map
public Map<String, String> sortMapByValue(Map<String, String> oriMap) { Map<String, String> sortedMap = new LinkedHashMap<String, String>(); if (oriMap != null && !oriMap.isEmpty()) { List<Map.Entry<String, String>> entryList = new ArrayList<Map.Entry<String, String>>(oriMap.entrySet()); Collections.sort(entryList, new Comparator<Map.Entry<String, String>>() { public int compare(Entry<String, String> entry1, Entry<String, String> entry2) { int value1 = 0, value2 = 0; try { value1 = getInt(entry1.getValue()); value2 = getInt(entry2.getValue()); } catch (NumberFormatException e) { value1 = 0; value2 = 0; } return value2 - value1; } }); Iterator<Map.Entry<String, String>> iter = entryList.iterator(); Map.Entry<String, String> tmpEntry = null; while (iter.hasNext()) { tmpEntry = iter.next(); sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue()); } } return sortedMap; } -
对于数组,可以使用Arrays.sort()方法。方法接口如下,可以看到各种基本类型的数组都可以sort:

-
对于字符串,如果要对字符串内的字符排序,可以先使用string.toCharArray()方法转换为字符数组,然后使用new String()将字符数组传入以得到字符串。注意不能直接通过Arrays.toString()方法获取字符串,这样得到的是一个字符串形式的数组
这里要注意,Arrays千万不要错写为Array,那个是反射的包,表示Array类

浙公网安备 33010602011771号