常用类之集合:HashMap+TreeMap 待我称王封你为后i 2022-11-06 10:48 2阅读 0赞 ## Map ## * 映射 通过某一个key可以直接定位到一个value值 * 存储的方式以 键值对 存储 key-value * key无序无重复 value无序可重复 * key无序还是一样,指的是存入顺序与取得顺序不一致 * key无重复当然指的是 元素不能一致 **1.map基本使用** * HashMap * TreeMap * Properties **HashMap** 1.包 java.util 2.如何创建对象 3.基本方法 增删改查 增put(key,value) 存放一组映射关系 key-value 1.key存储的顺序与取得顺序不同 2.不同的key可以存储相同的value 3.key若有相同的 则将 原有的value覆盖而不是拒绝存入(跟set刚好相反) 删E = remove(key); 改put(key,value1) put(key,value2) replace(key,newValue) 查E = get(key) 遍历map集合? key不一定什么样 获取到所有的key 遍历key 通过key获取value Set<Key> = keySet()获取全部的key Set<Entry> = entrySet();获取全部entry对象 entry 包括 key value size(); 4.除了上述几个常用的方法外 其他API中提供的方法 clear containsKey(key) containsValue(value) get(key)如果key存在就返回对应的value 若如果key不存在则返回null getOrDefault(key,defaultValue);如果key存在就返回对应的value 若没有找到则返回默认值(defaultValue:给的值) isEmpty() putAll(map) putIfAbsent(key,value);//如果key不存在才向集合内添加 如果key存在就不添加啦 5.map集合在什么情形下用? 1.想要存储一组元素 数组 or 集合 如果存储的元素以后长度不变用数组 如果长度以后不确定 用集合 2.如果发现长度以后不确定--->集合 List Set Map List家族有序的 存储有顺序用这个 ArrayList 更适合遍历轮询 LinkedList 更适合插入和删除 Stack LIFO Set家族无重复 存储元素希望自动去掉重复元素用这个 Hash 性能更高 Tree 希望存进去的元素自动去重复 同时还能自动排序 Map家族k-v 通过唯一的k快速找寻v用这个 Hash 性能更高 Tree 希望存进去的元素key自动排序 能体会每一个不同集合的特点 7.HashMap底层的数据结构存储 散列表的形式 数组+链表 Person对象存入HashMap中? 可以 hashCode方法---->不同的对象 可以产生相同的hashCode码的 不同的hashCode码-->不同的对象 Set<Entry<Integer,String>> entrys=map.entrySet();//获取map集合的全部entry对象 Iterator<Entry<Integer,String>> it=entrys.iterator(); while (it.hasNext()){ Entry<Integer,String> entry=it.next();//entry 包括 key value Integer key=entry.getKey(); String value=entry.getValue(); System.out.println(key+"---"+value); } **示例代码:** public class TestHashMap { public static void main(String[] args){ //创建一个HashMap对象 HashMap<Integer,String> map=new HashMap<Integer, String>(); //将一些key-value的映射关系存入集合 map.put(2,"bb"); map.put(5,"ee"); map.put(6,"tt");//key不同 value与1相同 map.put(4,"dd"); map.put(3,"cc"); map.put(6,"xx");//key相同 value与之前6不同 覆盖了之前的 map.put(1,"tt"); /*System.out.println(map);//{1=tt, 2=bb, 3=cc, 4=dd, 5=ee, 6=xx} map.remove(3);//删除3这个键对 System.out.println(map);//{1=tt, 2=bb, 4=dd, 5=ee, 6=xx}*/ //获取map集合的全部key /*Set<Integer> keys=map.keySet(); //通过迭代器遍历keys Iterator<Integer> it=keys.iterator(); while (it.hasNext()){ Integer key=it.next(); String value=map.get(key); System.out.println(key+"---"+value); }*/ Set<Entry<Integer,String>> entrys=map.entrySet();//获取map集合的全部entry对象 Iterator<Entry<Integer,String>> it=entrys.iterator(); while (it.hasNext()){ Entry<Integer,String> entry=it.next();//entry 包括 key value Integer key=entry.getKey(); String value=entry.getValue(); System.out.println(key+"---"+value); } System.out.println(map.get(2));//bb 如果key存在就返回对应的value System.out.println(map.get(10));//null 如果key不存在则返回null //如果key存在就返回对应的value 若没有找到则返回默认值(defaultValue:给的值) System.out.println(map.getOrDefault(2,"500"));//bb System.out.println(map.getOrDefault(10,"100"));//100 map.putIfAbsent(20,"yyy");//如果key不存在才向集合内添加 如果key存在就不添加啦 System.out.println(map); } } **TreeMap** * 自然有序 按照Unicode编码自然有序 * map集合中的key需要可比较的 * key的对象需要实现Comparable接口 1.java.util包 2.构造方法 > 无参数 带map参数 3.常用方法 > put get remove replace size 4.底层数据结构的存储 > 红黑二叉树 **示例代码:** public class TestTreeMap { public static void main(String[] args){ TreeMap<Integer,String> map = new TreeMap<Integer,String>(); map.put(5,"e");//map集合中的key需要可比较的 key的对象需要实现Comparable接口 map.put(2,"b"); map.put(3,"c"); map.put(7,"g"); map.put(1,"a"); map.put(8,"h"); map.put(9,"i"); map.put(4,"d"); map.put(6,"f"); //map.replace(4,"ee"); System.out.println(map); } }
还没有评论,来说两句吧...