Map集合

    xiaoxiao2022-07-07  187

    1.集合框架Map方法归类

    2.Map两种遍历方式

    3.Map的去重复以及排序

    4.运用Map统计字符串出现的次数(面试题)

    Map中存放的都是一组组映射关系(Key==value) Map中的key不要求有序,不允许重复。value同样不要求有序,但可以重复。 最常见的Map实现类是HashMap, 储存方式是哈希表,优点是查询指定元素效率高。 在集合中是允许嵌套的 在map集合中key值不能重复,但是value值可以

    1.集合框架Map方法归类

    HashMap<String, Object> map=new HashMap<>(); map.put("java01", 1); map.put("java02", 2); map.put("java03", 3); map.put("java04", 3); 1、增加 map.put(K key, V value) map.putAll(Map<? extends K,? extends V> m) 2、删除 map.clear() map.remove(Object key) 3、判断 map.containsKey(Object key) map.containsValue(Object value) map.isEmpty() 4、获取 map.get(Object key) map.size() map.values() 关于put: 1: 添加元素的同时 他可以编辑原有的元素 如果说集合中没有key对应的value,那么就往集合中添加元素 如果说集合中对应的key有values值,则代表替换原有的值 2: 返回替换前原有的value值 Object obj=map.put("java04", "*"); 返回的是你之前传进的value值

    2.Map两种遍历方式

    第一种:map.entrySet Set<Entry<String, Object>> entrySet = map.entrySet(); for (Entry<String, Object> entry : entrySet) { System.out.println(entry.getKey()+"=="+entry.getValue()); } System.out.println("-------------------------"); 第二种:map.keySet Set<String> keySet = map.keySet(); for (String key : keySet) { System.out.println(key+"=="+map.get(key)); }

    3.Map的去重复 和排序

    Map

    Hashtable:底层是哈希表数据结构,不可以存入null键null值,该集合石线程同步的,jdk1.0,效率低 HashMap:底层是哈希表数据结构,允许使用null值和null键,该集合是不同步的。将Hashtable替代;jdk1.2,效率高 TreeMap:底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序

    排序:先写一个实体类 实现comparable接口

    Map<Student, String> map = new TreeMap<>(); map.put(new Student("liuting",18), "beijing"); map.put(new Student("wangwang",56), "changcha"); map.put(new Student("goudan",28), "dongjin"); map.put(new Student("xuayangyang",18), "hulunbeier"); map.put(new Student("liuting",18), "beijing"); map.put(new Student("liuting",18), "beijing"); Set<Entry<Student, String>> entrySet = map.entrySet(); for (Entry<Student, String> entry : entrySet) { System.out.println(entry.getKey()+"==="+entry.getValue()); } //重写 @Override public int hashCode() { return this.getName().hashCode()+this.getAge()*39; } //判重equals 不然还是原来的数 @Override public boolean equals(Object obj) { Student stu=(Student) obj; return this.getAge()==stu.getAge()&&this.getName().equals(stu.getName()); } //按年龄进行排序 @Override public int compareTo(Student o) { int num=this.getAge()-o.getAge();//主要条件 if(num==0) { return this.getName().compareTo(o.getName());//次要条件 } return num; } //排序 按名字首字母排序 class StuComp implements Comparator<Student>{ @Override public int compare(Student o1, Student o2) { int num=o1.getName().compareTo(o2.getName()); if(num==0) { return o1.getAge()-o2.getAge(); } return num; }

    4.运用Map统计字符串出现的次数(面试题)

    /** * * 思考 * 统计 排序 * * 统计功能 * * 1.将字符串转为字符数组 将这个字符串中的字符串中的字符当作map集合中的map, * 将字符的次数作为value值 * * * 2.当字符出现第一次的时候,用它在集合中寻找,返回值必然为null,之后将该字符对应的值改为1 * * 3.如果不是第一次出线值不为null 就应该加一; */ //定义一个值 public static void main(String[] args) { String str="ajuhoarhoaloriouehjfuvkajdfbhoiaehp"; str=cishu(str); System.out.println(str); } //字符串统计的功能 public static String cishu(String str) { char[] charArray = str.toCharArray(); //创建一个集合 Map<Character, Integer>map=new HashMap<>();//map集合中的泛型要使用包装类或者是引用数据类型 //遍历 for (char c : charArray) { Integer value = map.get(c); if(value==null) { map.put(c, 1);//该字符对应的值不为null }else { map.put(c, ++value); } } StringBuffer和String的区别 String:会开辟一个行的空间 StringBuffer:不会开辟新的空间;从而性能更优 StringBuffer sb=new StringBuffer(); for(Map.Entry<Character, Integer> entry:map.entrySet()) { sb.append(entry.getKey()+"("+entry.getValue()+")"); } return sb.toString(); }
    最新回复(0)