Java集合体系(二)-- Map体系

1、Map

   Map用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的key,一组保存Map里的value,key和value都可以是任何引用类型的数据。Map的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较总会返回false。
  key和value之间存在着单向的一对一的关系,通过指定的key,能够找到对应的value。Map中存在一个keySet()方法,能够获得所有的key,由于key不能重复且无序,所以本质上key集合就是一个set集合,而value看起来则像是一个list集合。
在这里插入图片描述
Map接口常用方法
void clear():删除该Map对象的所有k-v对
boolean containsKey(Object key):查询该Map对象是否包含指定的Key
boolean containsValue(Object value):查询该Map对象是否包含指定的value
Set entrySet():返回该Map对象包含的k-v对所组成的Set集合,Set集合元素都是Map.Entry(Entry是Map的内部类)对象
Object get(Object key):返回指定key对应的value;如果该Map对象不包含该key,则返回null
boolean isEmpty():查询该Map对象是否为空
Set keySet():返回该Map对象所有key组成的Set集合
Object put(Object key,Object value):向该Map对象添加一对k-v对
Object remove(Object key):删除指定key所对应k-v对
boolean remove(Object key, Object value):删除指定key和value所对应k-v对,成功删除则返回True
int size():返回该Map对象的k-v对个数

2、HashMap和Hashtable

  HashMap和Hashtable都是Map接口的实现类,类似于ArrayList和Vector的关系。在实际开发中,HashMap使用率要远远大于Hashtable。从命名规则来看,可知道Hashtable是个古老的类(没有遵从如今的命名规范)。
  想要在HashMap和Hashtable中存储数据,用作key的对象必须实现hashCode()方法和equals()方法。

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Set;

/**
 * @author RuiMing Lin
 * @date 2020-03-05 16:01
 */
public class Person {
    //使用Person类所为key
    private String name;
    private int age;
    public Person(String name, int age) {
        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 "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;
        Person person = (Person) o;
        return getAge() == person.getAge() &&
                Objects.equals(getName(), person.getName());
    }
    @Override
    public int hashCode() {
        return Objects.hash(getName(), getAge());
    }

    public static void main(String[] args) {
        HashMap<Person, String> hmap = new HashMap<>();
        hmap.put(new Person("小明", 18), "是个坏学生");
        hmap.put(new Person("小红", 17), "是个好学生");
        hmap.put(new Person("小刚", 19), "是个学霸");
        Set<Map.Entry<Person, String>> entrySet = hmap.entrySet();
        for (Map.Entry<Person, String> entry : entrySet) {
            Person person = entry.getKey();
            String string = entry.getValue();
            System.out.println("person = " + person + "..." + "string = " + string);
        }
    }
}

3、LinkedHashMap

LinkedHashMap是HashMap的一个子类,用法几乎一样,只是存储顺序的实现方法不同。LinkedHashMap的底层是使用哈希表与双向链表来保存所有元素,所以LinkedHashMap的迭代顺序和插入顺序一致。

import java.security.Key;
        import java.util.LinkedHashMap;
        import java.util.Map;
        import java.util.Set;

/**
 * @author RuiMing Lin
 * @date 2020-03-05 16:14
 */
public class LinkedHashMapDemo {
    public static void main(String[] args) {
        LinkedHashMap<String,Integer> lsmap = new LinkedHashMap();
        lsmap.put("小明", 18);
        lsmap.put("小红", 19);
        lsmap.put("小刚", 20);
        Set<Map.Entry<String, Integer>> entrySet = lsmap.entrySet();
        for (Map.Entry<String, Integer> entry : entrySet) {
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println("key = " + key + "..." + "value = " + value);
        }
    }
}

4、SortedMap和TreeMap

SortedMap和TreeMap是原理与上一篇博客的SortedSet和TreeSet一样,详情查看上一篇博客。

有错误的地方敬请指出!觉得写得可以的话麻烦给个赞!欢迎大家评论区或者私信交流!

发布了30 篇原创文章 · 获赞 72 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Orange_minger/article/details/104571897
今日推荐