一、数组初始化默认值 布尔数组默认值是false,int 默认值是0,我们可以自己调用API规定 int[] result = new int[5]; Arrays.fill(result, -1);//默认全部初始化为-1 二、3/2 在int 里是1,但是如果我们的题目条件如 不低于某a值的一半我们就得需要向上取整(int) Math.ceil(a/2.0) 参数必须是double类型,返回值也是double,你也可以转型为int 三、map的默认值骚操作 比如统计字符出现数量,累加的操作 可以这样写,节约代码量 不然得先判断键是否存在,不存在赋值0,存在就取值,取值了再加值,再放新值。 四、TreeMap排序 根据value排序 二维数组骚操作排序 TreeMap是根据自定义比较器进行排序,基本类型如int根据大小排,String类型根据字典顺序排序。
TreeMap的键就是一个TreeSet,键可以直接实现排序,并且带有去重的操作。
如果我们想根据哈希表的value进行排序呢?
Set<Map.Entry<Integer, Integer>> set = map.entrySet(); ArrayList<Map.Entry<Integer, Integer>> list = new ArrayList<>(set); Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() { @Override public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) { return o2.getValue() - o1.getValue(); } });
我们把entry节点化作一个set给提取出来,放入一个ArrayList里,在利用比较器根据value就可以实现排序。
TreeSet,Treemap的键在排序时都可以去重,按照树的结构进行排序和去重检测。
链表和数组排序不会去重
如果我们需要去做不去重的排序,并且要也要存储键和值怎么做呢?
如按照磁盘大小进行排序这题
M G T输入不一样,
我们需要一个键存换算后的单位值如1024MB,又需要一个value去存当前的容量字符串 2T 1G等
使用map会导致去重
我们可以使用二维数组,arr[][] 每行就是一个磁盘容量,0索引存当前统一换算单位的,1索引存原本的字符串。
按照0排序,1读取原字符串。
同时也不会改变输入顺序。