java-Map集合
Map集合
- Map集合也叫“键值对集合”,格式:{key1=value1,key2=value2,key3=value3}
- 所有键不允许重复,值可以重复,键和值一一对应
Map集合特点:
注意:Map系列集合特点都是由键决定的,值不做要求 - hashMap:无序,不重复,无索引
- LinkedHashMap:有序,无重复,无索引
- TreeMap:按大小默认升序排列,无重复,无索引
Map集合的常用方法
Map集合的遍历方式
键找值
public class MapTraversedemo3 {public static void main(String[] args) {Map<String,Integer> map = new LinkedHashMap<>();map.put("贺丽亚",18);map.put("克拉里",19);map.put("贺丽亚",20);map.put("芽衣",30);map.put("寻梦者",19);System.out.println(map);//1、提取map集合的全部键到set集合Set<String> keys = map.keySet();//2、遍历set集合,获取每一个键,获取键对应的值for (String key : keys) {Integer value = map.get(key);System.out.println(key+"="+value);}}
}
键值对
public class MapTraversedemo4 {public static void main(String[] args) {//键值对Map<String,Integer> map = new LinkedHashMap<>();map.put("贺丽亚",18);map.put("克拉里",19);map.put("贺丽亚",20);map.put("芽衣",30);map.put("寻梦者",19);System.out.println(map);//把map集合转成set集合,里面的元素都是键值对类型Set<Map.Entry<String,Integer>> entrySet = map.entrySet();for (Map.Entry<String,Integer> entry : entrySet) {//获取键String key = entry.getKey();//获取值Integer value = entry.getValue();System.out.println(key+"---"+value);}}
}
Lambda表达式
public class MapTraversedemo5 {public static void main(String[] args) {//LambdaMap<String,Integer> map = new LinkedHashMap<>();map.put("贺丽亚",18);map.put("克拉里",19);map.put("贺丽亚",20);map.put("芽衣",30);map.put("寻梦者",19);System.out.println(map);//1、直接调用map集合的forEach方法/*map.forEach(new BiConsumer<String, Integer>() {@Overridepublic void accept(String s, Integer integer) {System.out.println(s+"---"+integer);}});*/map.forEach((s,integer)-> System.out.println(s+"---"+integer));}
}
Map集合的实现类
set集合底层是基于map实现的,set集合只要键数据,不要值数据
LinkedHashSet集合底层原理就是LinkedHashMap
TreeMap:按键的大小默认升序排列,无重复,无索引
TreeMap和TreeSet底层都是基于红黑树实现的排序
public class mapdemo7 {public static void main(String[] args) {Map<People,String> map = new TreeMap<>((o1, o2)->Double.compare(o2.getSalary(),o1.getSalary()));map.put(new People("张三",18,5000),"955");map.put(new People("李四",19,6000),"188");map.put(new People("王五",20,7000),"198");map.put(new People("赵六",21,8000),"188");System.out.println(map);}
}