Java-HashMap集合

1.HashMap

  • 注意点:当引用类型放在的位置上时,要想键不重复,就必须在引用类上重写 hashCode()和 equals() 方法

HashMap和Hashtable的区别

  • 1、HashMap中允许null键和null值存在,而Hashtable不允许(键和值都不允许为null)
  • 2、HashMap是线程不安全的,而Hashtable是线程安全的
package com.shujia.wyh.day21;
import java.util.HashMap;
import java.util.Hashtable;

/*
        HashMap和Hashtable的区别
            1、HashMap中允许null键和null值存在,而Hashtable不允许(键和值都不允许为null)
            2、HashMap是线程不安全的,而Hashtable是线程安全的
 */
public class HashMapAndHashtable {
    public static void main(String[] args) {
        HashMap<String, String> map1 = new HashMap<>();
        map1.put(null,null);

        Hashtable<String, String> table1 = new Hashtable<>();
//        table1.put("123",null);
//        table1.put(null,"qqq");

    }
}
HashMap案例
HashMap<String,String>
代码如下:
package com.bigdat.java.day22;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/*
        HashMap案例
            HashMap<String,String>
 */
public class HashMapDemo1 {
         //创建 HashMap 的实例
    public static void main(String[] args) {
        HashMap <Integer,String> hashMap = new HashMap();
         //向集合中添加元素
        hashMap.put(10001, "年轻人!");
        hashMap.put(10002, "要努力!");
        hashMap.put(10003, "多奋斗!");
        hashMap.put(10004, "年轻不吃苦!");
        hashMap.put(10005, "啥时候吃苦呢?");
        // 由键找值 遍历
        Set<Integer> integers = hashMap.keySet();
        //增强 for 循环
        for (Integer integer : integers) {
            String s = hashMap.get(integer);
            System.out.println("代码:"+integer+",对应值:"+s);
        }
        System.out.println("============================");
        //迭代器遍历
        Iterator<Integer> iterator = integers.iterator();
        while (iterator.hasNext()) {
            Integer next = iterator.next();
            String s = hashMap.get(next);
            System.out.println("代码:"+next+",对应值:"+s);

        }
        System.out.println("=====================================");
        // entrySet() 遍历
        Set<Map.Entry<Integer, String>> entries = hashMap.entrySet();
        //增强 for循环
        for (Map.Entry<Integer, String> entry : entries) {
            Integer key = entry.getKey();
            final String  f = entry.getValue();
            System.out.println("键:"+key+",对应值:"+f);
        }
        System.out.println("=======================================");
        // 迭代器遍历
        Iterator<Map.Entry<Integer, String>> iterator1 = entries.iterator();
        while (iterator1.hasNext()){
            Map.Entry<Integer, String> next = iterator1.next();
            Integer key = next.getKey();
            String value = next.getValue();
            System.out.println("键:"+key+",对应值:"+value);
        }



    }
}
引用类型
package com.bigdat.java.day22;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/*
        HashMap<String,Student>
 */
public class HashMapDemo3 {
    public static void main(String[] args) {
        //创建 HashMap 对象
        HashMap<Integer, Student03> smap = new HashMap<>();
        //创建学生类对象
        Student03 s1 = new Student03("刘德华",29);
        Student03 s2 = new Student03("周润发",22);
        Student03 s3 = new Student03("黎明",32);
        Student03 s4 = new Student03("吴宗宪",24);
        Student03 s5 = new Student03("吴宗宪",24);
        Student03 s6 = new Student03("吴宗宪",25);
        //将学生对象添加到集合中
        smap.put(1001, s1);
        smap.put(1002, s2);
        smap.put(1003, s3);
        smap.put(1004, s4);
        smap.put(1005, s5);
        smap.put(1006, s6);

        //向集合中添加元素
        //底层依赖是元素的hashCode() 和equals 方法
        //因为底层保证唯一的只是针对于键来说的并没有对值做唯一的逻辑运算

        //遍历学生
        Set<Integer> integers = smap.keySet();
        for (Integer integer : integers) {
            Student03 student03 = smap.get(integer);
            System.out.println("编号:"+integer+",学生信息:"+student03);
        }
        System.out.println("==================================");
        Set<Map.Entry<Integer, Student03>> entries = smap.entrySet();
        for (Map.Entry<Integer, Student03> entry : entries) {
            Integer key = entry.getKey();
            Student03 value = entry.getValue();
            System.out.println("编号:"+key+",学生信息:"+value);
        }
    }
}

学生类:

package com.bigdat.java.day22;
import java.util.Objects;
/*
    创建学生类
 */
public class Student03 {
    private String name;
    private int age;

    public Student03() {
    }

    public Student03(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 boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student03 student03 = (Student03) o;
        return age == student03.age && Objects.equals(name, student03.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

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

LinkedHashMap集合

  • 概述:public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>
    哈希表和链表实现的Map接口,具有可预测的迭代次序。 这种实现不同于HashMap,它维持于所有条目的运行双向链表。
    哈希表保证了元素的键的唯一性
    双链表保证元素的键的迭代次序
package com.shujia.wyh.day21;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
/*
        public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>
        哈希表和链表实现的Map接口,具有可预测的迭代次序。 这种实现不同于HashMap,它维持于所有条目的运行双向链表。
        哈希表保证了元素的键的唯一性
        双链表保证元素的键的迭代次序
 */
public class LinkedHashMapDemo {
    public static void main(String[] args) {
        //创建集合对象
        LinkedHashMap<String, String> lhm = new LinkedHashMap<>();

        //向集合中添加元素
        lhm.put("1001", "张三");
        lhm.put("1002", "李四");
        lhm.put("1003", "王五");
        lhm.put("1002", "赵六");
        lhm.put("1001", "张三");
        lhm.put("1004", "张三");
        lhm.put("1005", "张三");

        //遍历集合
        Set<Map.Entry<String, String>> entries = lhm.entrySet();
        for (Map.Entry<String, String> keyValue : entries) {
            String key = keyValue.getKey();
            String value = keyValue.getValue();
            System.out.println(key + ":" + value);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值