Java集合类---Map接口

4.Map接口

Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作。Map可以放置键值对,也就是每一个元素都包含键对象和值对象。(夫妻)

最常用的实现类:HashMap,HashMap对键对象的存取和HashSet一样,仍然采用的是哈希算法,所以使用自定类作为Map的键对象,必须复写equals和hashCode方法。

4.1Map接口常用方法

方法名 说明
Object put(Object key, Object value) 以“键-值对”的方式进行存储
Object get(Object key) 根据键返回相关联的值,如果不存在指定的键,返回null
Object remove(Object key) 删除由指定的键映射的“键-值对”
int size() 返回元素个数
int hashCode() 返回Map对象的哈希值
Set keySet() 返回键的集合(含键的Set视图)
Set entrySet() 返回键的集合(含键的Set视图)
Collection values() 返回值的集合
boolean containsKey(Object key) 如果存在由指定的键映射的“键-值对”,返回true
boolean containsValue(Object value) 判断Map对象是否包含相应的值
boolean isEmpty() 判断Map对象是否包含“键-值对”映射
boolean equals(Object o) 判断指定对象o与Map对象的等价性

4.2HashMap

  • 特点:

       存储数据采用的哈希表结构,元素的存取顺序不能保证一致。
       由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
       HashMap的值是没有顺序的,他是按照key的HashCode来实现的(根据key的HashCode值来存储数据),
       根据key可以直接获取它的Value,同时它具有很快的访问速度。
       HashMap最多只允许一条记录的key值为null(多条会覆盖);允许多条记录的Value为null
    

4.2.1代码Code

package mygather;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class HashMapTest02 {
    
    
    private long cardNo;

    public static void main(String[] args) {
    
    
        IdCard idCard01 = new IdCard();
        idCard01.cardNo = 111L;
        Person person01 = new Person();
        person01.name = "张三";

        IdCard idCard02 = new IdCard();
        idCard02.cardNo = 112L;
        Person person02 = new Person();
        person02.name = "李四";

        IdCard idCard03 = new IdCard();
        idCard03.cardNo = 113L;
        Person person03 = new Person();
        person03.name = "王五";

        Map<IdCard, Person> map = new HashMap<>();
        map.put(idCard01, person01);
        map.put(idCard02, person02);
        map.put(idCard03, person03);
        System.out.println(map.size());
        System.out.println(map.hashCode());

        //迭代器遍历
        for (Iterator iterator = map.entrySet().iterator(); iterator.hasNext(); ) {
    
    
            Map.Entry entry = (Map.Entry) iterator.next();
            IdCard idCard = (IdCard) entry.getKey();
            Person person = (Person) entry.getValue();
            System.out.println(idCard.cardNo + ", " + person.name);
        }
    }

    //重写equals()和hashCode()方法
    public boolean equals(Object obj) {
    
    
        if (obj == this) {
    
    
            return true;
        }
        if (obj instanceof IdCard) {
    
    
            IdCard idCard = (IdCard) obj;
            if (this.cardNo == idCard.cardNo) {
    
    
                return true;
            }
        }
        return false;
    }

    public int hashCode() {
    
    
        return new Long(cardNo).hashCode();
    }
}

class IdCard {
    
    
    long cardNo;
}

class Person {
    
    
    int age;
    String name;
}


4.2.2输出结果

在这里插入图片描述

4.3TreeMap

  • 特点:

      能够把它保存的记录根据key排序,默认是按升序排序,也可以指定排序的比较器
      当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。
      TreeMap集合排序:实现Comparable接口或Comparator接口,重写CompareTo方法
    

4.3.1代码Code

package mygather;

import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

public class MyTreeMap {
    
    
    public static void main(String[] args) {
    
    
        Map<String, String> treemap = new TreeMap<String, String>();
        treemap.put("1009", "赵六");
        treemap.put("1005", "李四");
        treemap.put("1006", "王五");
        treemap.put("1003", "张三");
        System.out.println(treemap);

        //迭代器遍历
        Iterator<Map.Entry<String, String>> iterator = treemap.entrySet().iterator();
        while (iterator.hasNext()) {
    
    
            Map.Entry entry = (Map.Entry) iterator.next();
            System.out.println(entry.getKey() + "," + entry.getValue());
        }
    }
}

4.3.2输出结果

在这里插入图片描述

4.4Map的遍历方式

1.在for-each循环中使用entry()

        Map<String, String> map = new HashMap<String, String>();
        for (Map.Entry<String, String> entry : map.entrySet()) {
    
    
            System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
        }

2.在for-each循环中仅仅遍历keys或values值

        Map<String, String> map = new HashMap<String, String>();
        //遍历map中的键
        for (String key : map.keySet()) {
    
    
            System.out.println("Key = " + key);
        }
        //遍历map中的值
        for (String value : map.values()) {
    
    
            System.out.println("Value = " + value);
        }

3.使用Iterator遍历

        Map<String, String> map = new HashMap<String, String>();
        Iterator<Map.Entry<String, String>> entries = map.entrySet().iterator();
        while (entries.hasNext()) {
    
    
            Map.Entry<String, String> entry = entries.next();
            System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
        }

Guess you like

Origin blog.csdn.net/qq_47949604/article/details/116566374