2020.8.7HashMap集合

01_Map集合

定义:Map集合称之为双列集合。一个键只能映射一个值,键是唯一的,键相同,值覆盖。

Map集合的继承体系

Map有4个子类
HashMap
Hashtable
LinkedHashMap
Treemap

01.1_HashMap

  1. 定义:HashMap 他的键的数据结构,是哈希表,无序且唯一,线程不安全,效率高。

  2. 格式:new HashMap<String,String>=new HashMap<>()

  3. 添加功能

  4. hm.put(“詹姆斯”,“韦德”);

  5. 当键相同值覆盖,返回的是上一次键所映射的那个旧值。

案例演示以上定义

package HashMapDemo01;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class HashMapTest01 {
    public static void main(String[] args) {
        //在我们生活中有一种数据是比较常见的。比如一个 学号------学生
        // "s001-----张三"
        // "s002"------"李四"
        // "s003"------"王五"
        ArrayList<String> arraylist = new ArrayList<>();
        arraylist.add("s001-----詹姆斯");
        arraylist.add("s002-----韦德");
        arraylist.add("s003-----安东尼");
        //如果要得到,soo1詹姆斯,要将字符串进行切割
        String[] str1 = arraylist.get(0).split("-+");
        System.out.println(str1[0]);
        System.out.println(str1[1]);
        //Java对于这种 键值映射关系的数据,为了我们方便的操作,给我们提供了另外一种容器,叫做Map集合。
        //Map 集合称之为双列结合 他有键,有值。
        //Map:双列集合,一个键只能映射一个值,键是唯一的,键相同,值覆盖。
        HashMap<String, String> stringHashMap = new HashMap<>();
        //添加功能
        String s = stringHashMap.put("隆多", "戴维斯");
        String s1 = stringHashMap.put("杜拉德利", "麦基");
        //当键相同,值覆盖,返回的是上一次这个键所映射的那个旧值
        String s2 = stringHashMap.put("隆多", "霍华德");
        String s3 = stringHashMap.put("JR", "詹姆斯");
        System.out.println(stringHashMap);//{杜拉德利=麦基, 隆多=霍华德, JR=詹姆斯}
        System.out.println(s);//null
        System.out.println(s2);//戴维斯

    }
}

其他功能

Map集合的功能概述
	a:添加功能 
		V put(K key,V value):添加元素。这个其实还有另一个功能?替换
			如果键是第一次存储,就直接存储元素,返回null
			如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
	b:删除功能
		void clear():移除所有的键值对元素
		V remove(Object key):根据键删除键值对元素,并把值返回
	c:判断功能
		boolean containsKey(Object key):判断集合是否包含指定的键
		boolean containsValue(Object value):判断集合是否包含指定的值
		boolean isEmpty():判断集合是否为空
	d:获取功能
		Set<Map.Entry<K,V>> entrySet(): 返回一个键值对的Set集合
		V get(Object key):根据键获取值
		Set<K> keySet():获取集合中所有键的集合
		Collection<V> values():获取集合中所有值的集合
	e:长度功能
		int size():返回集合中的键值对的对数
		f:
		getDrDefault:获取不到你可以定义一个默认值

案例演示

package HashMapDemo01;

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

public class HashMapTest01 {
    public static void main(String[] args) {
        HashMap<String, String> stringHashMap = new HashMap<>();
        //添加功能
        String s = stringHashMap.put("隆多", "戴维斯");
        String s1 = stringHashMap.put("杜拉德利", "麦基");
        String s2 = stringHashMap.put("库茨玛", "霍华德");
        String s3 = stringHashMap.put("JR", "詹姆斯");
        //删除功能
       /* //remove:根据键删除键值对元素,并把值返回
        stringHashMap.remove("隆多");
        System.out.println(stringHashMap);//{杜拉德利=麦基, JR=詹姆斯}
        //void clear():移除所有的键值对元素
        stringHashMap.clear();
        System.out.println(stringHashMap);//{}*/
        //判断功能
        //	boolean containsKey(Object key):判断集合是否包含指定的键
        System.out.println(stringHashMap.containsKey("隆多"));//true
        //	boolean containsValue(Object value):判断集合是否包含指定的值
        System.out.println(stringHashMap.containsValue("詹姆斯"));//true
        //	boolean isEmpty():判断集合是否为空
        System.out.println(stringHashMap.isEmpty());//false
        System.out.println("-------------------------");
        //获取功能
        Set<Map.Entry<String, String>> entries = stringHashMap.entrySet();
        System.out.println(entries);//[杜拉德利=麦基, 库茨玛=霍华德, 隆多=戴维斯, JR=詹姆斯]
        //V get(Object key):根据键获取值
        System.out.println(stringHashMap.get("JR"));
        //	Set<K> keySet():获取集合中所有键的集合
        System.out.println(stringHashMap.keySet());//[杜拉德利, 库茨玛, 隆多, JR]
        //Collection<V> values():获取集合中所有值的集合
        System.out.println(stringHashMap.values());//[麦基, 霍华德, 戴维斯, 詹姆斯]
        //size
        System.out.println(stringHashMap.size());//4
       // getDrDefault:获取不到你可以定义一个默认值
        System.out.println(stringHashMap.getOrDefault("威少", "杜兰特"));

    }
}

01.2_Map集合的遍历之键找值

HashMap<String, String> stringHashMap = new HashMap<>();
//添加功能
String s = stringHashMap.put("隆多", "戴维斯");
String s1 = stringHashMap.put("杜拉德利", "麦基");
String s2 = stringHashMap.put("库茨玛", "霍华德");
String s3 = stringHashMap.put("JR", "詹姆斯");
//第一种:键找值  keySet();获取所有键的集合
Set<String> keyset = stringHashMap.keySet();
for (String key : keyset) {
    String value = stringHashMap.get(key);
    System.out.println(key+","+value);
}

01.3_Map集合的遍历之键值对对象找键和值

//第二种:把键值对,看做一个整体,把键值对,对象获取出来,然后使用键值对,对象中的方法来获取键和值。
Set<Map.Entry<String, String>> entries = stringHashMap.entrySet();
for (Map.Entry<String, String> entry : entries) {
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key+","+value);

}

01.4_第三种方式;forEach

stringHashMap.forEach(new BiConsumer<String, String>() {
    //主要是理解Consumer,消费者,就可以了~主要是对入参做一些列的操作,在stream里,主要是用于forEach;内部迭代的时候,对传入的参数,做一系列的业务操作,没有返回值;
    @Override
    public void accept(String key, String value) {
        System.out.println(key+","+value);
    }
});

01.5_存键是String类型,值是Student类型

package HashMapDemo01;

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

public class HashMapTest02 {
    public static void main(String[] args) {
        //存键是String类型,值是Student类型
        HashMap<String, Student> hashMap = new HashMap<>();
        hashMap.put("2000", new Student("科比", 19));
        hashMap.put("2003", new Student("詹姆斯", 18));
        hashMap.put("2004", new Student("杜兰特", 20));
        hashMap.put("2019", new Student("锡安", 22));
        //遍历
        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.getName() + "," + value.getAge());
        }
        System.out.println("----------");
        Set<String> keySet = hashMap.keySet();
        for (String key : keySet) {
            Student value = hashMap.get(key);
            System.out.println(key + "," + value.getName() + "," + value.getAge());
        }
        System.out.println("----------");
       hashMap.forEach(new BiConsumer<String, Student>() {
           @Override
           public void accept(String key, Student value) {
               System.out.println(key + "," + value.getName() + "," + value.getAge());
           }
       });
    }
}

01.6_存键是stu dent类型,值是string类型

package HashMapDemo01;

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

public class HashMapTest03 {
    public static void main(String[] args) {
        //存储键是Student类型,值是String类型
        HashMap<Student,String > hashMap = new HashMap<>();
        hashMap.put(new Student("科比", 19), "2000");
        hashMap.put(new Student("詹姆斯", 18), "2003");
        hashMap.put(new Student("杜兰特", 20), "2004");
        hashMap.put(new Student("锡安", 22), "2019");
        //遍历
        Set<Map.Entry<Student, String>> entries = hashMap.entrySet();
        for (Map.Entry<Student, String> entry : entries) {
            Student key = entry.getKey();
            String value = entry.getValue();
            System.out.println( key.getName() + "," + key.getAge()+","+value);
        }

    }
}

01.7_HashMap 和 Hashtable 的区别

 HashMap 并允许使用 null 值和 null 键 线程不安全,效率高
Hashtable 不允许 null值null键  线程安全,效率低

案例演示

package HashMapDemo01;

import java.util.HashMap;
import java.util.Hashtable;

public class HashMapTest04 {
    public static void main(String[] args) {
        //HashMap 和 Hashtable 的区别
        HashMap<String, String> stringStringHashMap = new HashMap<>();
        stringStringHashMap.put(null,null);
        System.out.println(stringStringHashMap);

        Hashtable<String, String> stringStringHashtable = new Hashtable<>();
        //stringStringHashtable.put(null,"abc");
        stringStringHashtable.put("abc", null);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有点。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值