Map的总结

xiaoxiao2021-03-01  12

Map接口需要注意: Map提供了一种映射关系,其中的元素是以键值对的形式存储的,能够实现根据key快速查找value;

键值是唯一的,值是可以重复,一个值可以和很多键形成对应关系,每个建最多只能映射到一个值。 (打个比方就比如身份证,身份证号是唯一的,但是身份证上面的名字却不是,我可以叫马克波罗,你也可以!)

Map集合的从数据结构是针对键有效,跟值无关。 Collection集合的数据结构是针对元素有效。

Map的功能: 添加功能: V put(K key, V value):添加元素

删除功能:

void clear():移除所有的键值对元素 V remove(Object key):根据键删除键值元素,并把值进行返回

判断功能:

boolean containsKey(Object key):判断集合是否包含指定的键 boolean containsValue(Object value):判断集合是否包含指定的值 boolean isEmpty():判断集合是否为空 获取功能: V get(Object key):根据键来获取值 Set<K> keySet():获取集合中所有的键 Collection<V> values():获取集合中所有值的集合 Set<Map.Entry<K,V>> entrySet():返回的是键值对 对象 的集合 长度功能: int size():返回集合中的键值对的对数

例子: public static void main(String[] args) {

Map<String, String> map = new HashMap<>(); map.put("马可波罗", "小乔"); map.put("百里守约", "大乔"); map.put("狼狗", "明世隐"); System.out.println(map.put("公孙离", "貂蝉")); System.out.println(map); System.out.println(map.put("公孙离", "女娲")); //键是唯一的,所以此时键的值已经被替换,由"杨幂"变成了"王鸥"; System.out.println(map); String remove = map.remove("狼狗"); //删除了"狼狗"键 System.out.println(remove); //返回的是键所对应的值 //map.clear(); //这是一个清空集合的方法 System.out.println(map); boolean containsKey = map.containsKey("马可波罗"); //判断集合中是否包含该键 System.out.println(containsKey); boolean containsValue = map.containsValue("小娃娃");//判断集合中是否包含该值 System.out.println(containsValue); //map.clear(); boolean empty = map.isEmpty(); //判断集合是否为空 System.out.println(empty); System.out.println("----------------------"); String string = map.get("马可波罗");//通过键来获取值 System.out.println(string); Set<String> keySet = map.keySet();//获取集合中所有的键,因为键是唯一的 所以用Set(唯一性)来接收 for (String string2 : keySet) { //遍历 System.out.println(string2+"--------"+map.get(string2)); } System.out.println(keySet); Collection<String> values = map.values(); //获取所有的值 System.out.println(values); System.out.println(map.size());//返回集合中的键值对的对数 //Set<Map.Entry<K,V>> entrySet():返回的是键值对 对象 的集合 Set<Map.Entry<String, String>> entrySet = map.entrySet(); for (Entry<String, String> entry : entrySet) { System.out.println(entry.getKey()+"-------"+entry.getValue()); }

}

HashMap类

HashMap是Map的一个重要实现类,也是最常用的,基于哈希表实现(保证唯一性)

练习·:要求如果两个对象的成员变量的值相同,则为同一个对象 假设我们定义一个工人类,想要比较成员变量是否相同或者集合是否存在这个对象 我们需要实现equlas方法的重写

例子: package com.hwua.Map;

public class Worker {

private String name; private int age; public Worker() { super(); } public Worker(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Worker [name=" + name + ", age=" + age + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Worker other = (Worker) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; }

}

public static void main(String[] args) { HashMap<Worker, Integer> map = new HashMap<>(); map.put(new Worker("张三", 16), 8800); map.put(new Worker("李四", 26), 1800); map.put(new Worker("王五", 36), 4800); map.put(new Worker("张三", 46), 2800); map.put(new Worker("张三", 16), 1800); System.out.println(map); Set<Worker> keySet = map.keySet(); for (Worker worker : keySet) { System.out.println(worker+"--"+map.get(worker)); } }

除了HashMap还有TreeMap 要使用TreeMap进行排序,就要实现接口,可以在实体类(上例的工人类)中实现comprable接口的方法 也可以使用匿名内部类去实现ComparaTo接口的方法

直接上例子:(上例工人类适用于此例子) public static void main(String[] args) { // TODO Auto-generated method stub TreeMap<Worker, Integer> map = new TreeMap<>(new Comparator() {

@Override public int compare(Worker o1, Worker o2) { // TODO Auto-generated method stub int num = o1.getAge()-o2.getAge(); int num2 = num==0?o1.getName().compareTo(o2.getName()):num; return num2; } }); map.put(new Worker("张三", 16), 8800); map.put(new Worker("李四", 26), 1800); map.put(new Worker("王五", 36), 4800); map.put(new Worker("张三", 46), 2800); map.put(new Worker("张三", 16), 1800); System.out.println(map); }

扩展: public static void main(String[] args) { // TODO Auto-generated method stub ArrayList<HashMap<String, String>> arrayList = new ArrayList<>(); HashMap<String, String> sanguo = new HashMap<>(); sanguo.put(“周瑜”, “小乔”); sanguo.put(“吕布”, “貂蝉”); arrayList.add(sanguo);

HashMap<String, String> xiyouji = new HashMap<>(); xiyouji.put("牛魔王", "铁扇公主"); xiyouji.put("至尊宝", "紫霞仙子"); arrayList.add(xiyouji); HashMap<String, String> wuxia = new HashMap<>(); wuxia.put("郭靖", "黄蓉"); wuxia.put("杨过", "大雕"); arrayList.add(wuxia); System.out.println(arrayList); for (HashMap<String, String> hashMap : arrayList) { Set<Entry<String, String>> entrySet = hashMap.entrySet(); for (Entry<String, String> entry : entrySet) { System.out.println(entry.getKey()+"--"+entry.getValue()); } } } 集合里面可以有很多元素,一个键值对就是一个元素。
转载请注明原文地址: https://www.6miu.com/read-4149951.html

最新回复(0)