Map1.0

本文介绍了Java中的Map接口,它用于存储键值对,每个键唯一对应一个值。Map接口包含如put、get、remove等基本操作,并通过keySet、values和entrySet方法遍历集合。接着详细讲解了HashMap,它是无序且不重复的,提供了存储和获取元素的方法。LinkedHashMap则保持插入顺序,而TreeMap则能按键排序。示例代码展示了它们的用法和输出结果。
摘要由CSDN通过智能技术生成

Map

Map接口可以用数学中的函数的思想来学习Map集合。Map接口中的每一个元素都是键(key)到值(value)的映射,每一个键(key)都只对应一个值(value)(键和值是一一对应的关系)。Map接口是一个种双列集合,每一个元素都包含一个键对象Key和一个值对象Value,键和值之间存在着映射。Map集合中不允许重复。
Map集合中的常用方法:

void put(Object key,Object value);          //将指定的值和键存入集合并进行指定的映射关系
Object get(Object key);                     //返回指定的键所对应的值;如果集合中不存在改键返回(即不存在对应的值)null
void clear();                               //移除所有元素
V remove(Object key);                       //根据对应的键删除对应的值和该键,返回被删除的值
int size();                                 //返回集合中键值对的个数
boolean containsKey(Object key);            //如果此映射包含指定键的映射关系,返回true
boolean containsValue(Object value);        //如果此映射包含指定值的映射关系,返回true
Set keySet();                               //返回一个由键组成的set集合
Collection<V> value();                      //返回一个由值组成的Collection集合
Set<Map.Entry<K,V>>entrySet();              //返回一个包含此映射关系的set集合

HashMap

HashMap是Map接口的一个实现类,HashMap中的方法大部分都是Map接口方法的实现。常用的就是把HashMap集合对象的引用赋值给Map接口变量,HashMap中是无序不重复的。
例子:

package text1;

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


public class Test19 {
    public static void main(String[] args){
        //创建集合对象
        Map<Integer,String> map=new HashMap<Integer, String>();
        //向集合中添加元素
        map.put(1,"张三");
        map.put(2,"李四");
        map.put(3,"王二");
        //根据键获取值
        System.out.println("2对应的值是:"+map.get(2));
        System.out.println("3对应的值是:"+map.get(3));
        //判断集合中是否包含某个键
        System.out.println("集合中的键是否包含4:"+map.containsKey(4));
        System.out.println("集合中的键是否包含2:"+map.containsKey(2));
        //判断集合是否包含某个值
        System.out.println("集合中的值是否包含张三:"+map.containsValue("张三"));
        System.out.println("集合中的值是否包含麻子:"+map.containsValue("麻子"));
        //返回由键组成的Set集合并遍历
        Set<Integer> si=map.keySet();
        System.out.println("集合中所有的键为:");
        for(Integer i:si){
            System.out.println(i);
        }
        //返回由值组成的Collection集合并遍历
        Collection<String> cs=map.values();
        System.out.println("集合中所有的值为:");
        for(String s:cs){
            System.out.println(s);
        }
        //返回一个由映射关系为元素的Set集合
        Set<Map.Entry<Integer,String>> sm=map.entrySet();
        System.out.println("集合中的键值对为:");
        for(Map.Entry<Integer,String> m:sm){
            System.out.println(m);
        }
        //删除指定键对应的键值对
        System.out.println("删除的是:"+map.remove(3));
        //清除所有的元素
        map.clear();
    }
}

结果展示如下:
在这里插入图片描述

LinkedHashMap

LinkedHashMap是HashMap的子类,HashMap中的元素是无序的,而LinkedHashMap是有序的(存入顺序和遍历顺序是一致的)。而且LinkedHashMap和LinkedList一样使用的都是双向链表维护内部元素的关系。
下面例子:

package text1;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

public class Test20 {
    public static void main(String[] args) {
        //创建一个LinkedHashMap集合对象并赋值Map接口变量
        Map<Integer,String> map=new LinkedHashMap<Integer, String>();
        //向集合中添加元素
        map.put(1,"张三");
        map.put(3,"王二");
        map.put(2,"李四");
        //遍历集合元素
        Set<Map.Entry<Integer,String>> sm=map.entrySet();
        for(Map.Entry<Integer,String> m:sm){
            System.out.println(m);
        }
    }
}

结果如下:
在这里插入图片描述
虽然这个和上一个HashMap中的例子遍历结果显示输入顺序和输出顺序是一样的,这是因为HashMap集合会根据键进行自动排序,所以说我们会看到他进行1、2、3的输出,如果你感兴趣可以自己写一下程序,多试几次。

TreeMap

HashMap集合存储的元素的键是无序的(输入顺序和输出顺序是不一致的,但是HashMap集合再存储元素时会根据键值对的键进行自动排序)和不可重复的,为了对集合中的元素的键进行排序,Map接口还有一个可以对元素的键进行排序的实现类——就是 TreeMap。
例子:

package text1;

import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class Test21 {
    public static void main(String[] args) {
        //创建一个TreeMap对象,赋值给Map接口变量
        Map<Integer,String> map=new TreeMap<Integer,String>();
        //向集合中添加元素
        map.put(1,"张三");
        map.put(3,"王二");
        map.put(2,"李四");
        //获取该集合的映射关系并创建一个Set集合
        Set<Map.Entry<Integer,String>> sm=map.entrySet();
        //遍历
        for(Map.Entry<Integer,String> m:sm){
            System.out.println(m);
        }
    }
}

结果显示如下:
在这里插入图片描述
Treemap之所以可以对添加的元素的键进行排序,是因为它和TreeSet一样,TreeMap集合的排序也分为自然排序和自定义排序。下面使用一个自定义的类作为TreeSet的键并重写toString()方法和自定义排序方法:

package text1;

import java.util.Comparator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class Test22 {
    static class Student{
        private String name;
        private int age;

        public Student() {}
        public Student(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;
        }
        public String toString(){
            return "name="+name+",age="+age;
        }
    }

    public static void main(String[] args) {
        Map<Student,String> map=new TreeMap<Student,String>(new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                int num=s1.getAge()-s2.getAge();//先根据Student的age进行排序,再根据民资进行排序
                return num==0?s2.getName().compareTo(s1.getName()):num;
            }
        });
        //添加集合元素
        map.put(new Student("张三",15),"上海");
        map.put(new Student("李四",15),"广州");
        map.put(new Student("王二",14),"北京");
        //创建一个由该映射关系组成的Set集合
        Set<Map.Entry<Student,String>> sm=map.entrySet();
        //遍历Set集合
        for(Map.Entry<Student,String> m:sm){
            System.out.println(m);
        }
    }
}

结果显示如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值