【集合框架之Map】

    xiaoxiao2022-07-07  219

    前言

    |ू・ω・` ) Map的方法使用跟Set的使用没有很大的区别,最大的区别就在于:

    Map集合中存放的都是一组组映射关系

    都是以一个建对一个值

    HashMap(底层结构:哈希表数据结构,效率高) Map<String, Object> mp = new HashMap<>(); TreeMap(底层结构:二叉树结构,可以进行排序) Map<student, String> map = new TreeMap<>();

    应用一(HashMap):

    需求:学生作为键,地址作为值进行存储,名字年龄相同则被认定为一个人 重写好**hashCode()方法和equals()**方法


    应用一(TreeMap):

    需求:按年龄进行排序

    应用二

    需求:统计字符串中字符出现次数,比如:(sjsdfsfsdfsfsdfsdfssdsa) 这个我们需先理清楚思路: 统计:

    将字符串转换为字符数组,将这个字符串中的字符当作map的key值,将出现的次数作为values当字符第一次出现后,要去这个集合查找,若没有的话返回为null,那么就将values设置为1如果说不是第一次,那么就返回不为null,就将values++;

    ok,看代码

    public static void main(String[] args) { String str ="sjsdfsfsdfsfsdfsdfssdsa"; System.out.println(charach(str)); } public static StringBuffer charach(String str) { Map<Character, Integer> map = new TreeMap<>(); char[] charArray = str.toCharArray(); for (char c : charArray) { Integer get = map.get(c); if(get==null) { map.put(c, 1); } else { map.put(c, ++get); } } StringBuffer sbf = new StringBuffer(); Set<Entry<Character, Integer>> entrySet = map.entrySet(); for (Entry<Character, Integer> entry : entrySet) { sbf.append(entry.getKey()+"("+entry.getValue()+")"); } return sbf; }

    根据次数排序

    Set的用法和Map是差不多的主要在于他们的方法:

    增加 put(K key, V value) putAll(Map<? extends K,? extends V> m) 删除 clear() remove(Object key) 判断 containsKey(Object key) containsValue(Object value) isEmpty() 获取 get(Object key) size() values() //遍历时所要用到的 entrySet() keySet()

    题外(Collections和Arrays)

    Collections:是集合框架中的工具类,方法是静态的 如下一些:

    Collections.sort(List list);按自然顺序排序Collections.reverse(List list); 强行将按自然顺序排列的顺序逆转,可以自己加入比较器,按自定义比较方法逆转。Collections.shuffle(List<?> list);使用默认随机源对指定列表进行替换。

    Arrays:是集合框架中的工具类,方法是静态的 如下一些:

    Arrays.sort();排序Arrays.binarySearch();二分查找Arrays.equals();两个数组相等的判定:两个数组包含相同数量的元素,并且两个数组中的所有相应元素都是相等的。

    题外 集合框架拓展(增强for循环、可变参数、静态导入)

    增强for循环 概念:实际上有很多人都用过的,但是不知道叫什么, 也就是我们经常用的foreach遍历 普通for循环的遍历方式 for(int i = 0 ; i<arr.length ; i++){ System.out.println("元素:"+ arr[i]); } //使用增强for循环实现 for(int item :arr){ System.out.println("元素:"+ item); }

    其实:增强for循环底层也是使用了迭代器获取的


    可变参数 概念:如果在写一个方法时,不清楚自己到底要写多少参数时,就可以用到可变参数了 因为可变参数,会自动变化:

    如:

    public static void main(String[] args) { printarr("first","second"); } public static void printarr(String...str){ for(String string:str){ System.out.println(string); //输出 first second } }

    每个方法最多一个变长参数,并且该参数的位置是方法的的最后

    **注意,虽然这种方法可以重载,但是系统调用时会优先调用固定参数的方法


    静态导入

    概念:就是导入某个包里所有的静态成员

    如:

    import static java.util.system;
    最新回复(0)