Map集合

Map集合

需求:我班有一群学生,学生里面有重名,如果拿姓名区分同学,可能无法达到需求
我们可以给每个学生给一个编号来区分,
键---->值 这种对应关系的数据如何存储

s001---张三
.
.
.

Map专门用来存储键--->值关系的数据

Map是接口

linkedhashmap
hashmap
hashtable
treemap

collection 是单列集合
Map 是双列集合

HashMap

基于哈希表的Map接口的实现

Map集合所有数据结构,只和键有关
Map<String,String> hm = new HashMap<String,String>

put往Map集合中添加键和值

hm.put("黄","辉冯");
hm.put("胡","锅");

====如果键相同返回上一次键所对应的值

获取(遍历Map集合)

与获取相关方法

键找值:String v = hm.get("黄");

获取所有的值:Collection<String> values = hm.values();
    for(String value:values){
        sout(value);
    }

获取所有的键:Set<String> keys = hm.KeySet();
    for(String key:keys){
        sout(key);
    }

KeySet(),get()
先获取键,在通过键找值

public class Map1 {
    public static void main(String[] args) {
        HashMap<String, String> hm = new HashMap<>();

        hm.put("黄","飞鸿");
        hm.put("赵","四");

        //键找值
        Set<String> k = hm.keySet();

        for (String key:k) {

            String value = hm.get(key);
            System.out.println(key+"==="+value);
        }

    }

}

输出结果:

黄===飞鸿
赵===四

public class Map1 {
    public static void main(String[] args) {
        HashMap<String, String> hm = new HashMap<String, String>();

        hm.put("黄","飞鸿");
        hm.put("赵","四");

        //遍历方式 将键值对 看作对象
        Set<HashMap.Entry<String,String>> entries= hm.entrySet();
        for(HashMap.Entry<String,String> entry: entries){
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+"=="+value);
        }
    }

}

输出结果:

黄===飞鸿
赵===四

无序,允许插入null值

TreeMap

有序

数据结构:二叉树

treeMap.put(1,"bbb");
treeMap.put(3,"bbb");
treeMap.put(4,"bbb");
treeMap.put(2,"bbb");
treeMap.put(5,"bbb");

Map集合的数据结构只和键有关

键不允许插入null,因为没办法排序

//int r = s1.getAge() - s2.getAge();
//int r2 = r == 0 ? s1.getName().compareTo(s2.getName()) : r;
//return -r2

treemap存储学生对象并遍历

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

public abstract class Demo2 {
    public static void main(String[] args) {
        HashMap<String,Student> hashMap = new HashMap<>();
        hashMap.put("ts001",new Student("aaa",20));
        hashMap.put("ts002",new Student("bbb",22));
        hashMap.put("ts003",new Student("ccc",30));
        hashMap.put("ts004",new Student("ddd",40));

        System.out.println("第一种方法:");
        Method1(hashMap);
        System.out.println("第二种方法:");
        Method2(hashMap);


    }

    public static void Method1(HashMap<String,Student> hashMap) {
        Set<String> set = hashMap.keySet();
        for (String str:set) {
            Student student = hashMap.get(str);
            System.out.println(str+student);
        }

    }
    public static  void Method2(HashMap<String,Student> hashMap){
        Set<Map.Entry<String, Student>> entries = hashMap.entrySet();
        for (Map.Entry<String, Student> entry:entries) {
            String key = entry.getKey();
            Student value = entry.getValue();
            System.out.println(key+" "+value);
        }
    }
}

自定义对象Student对象


public class Student {
    private String name;
    private Integer age;

    public Student() {
    }

    public Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值