java中Map的基本知识

本文主要介绍Map的的一些方法

HashMap:

    1. 底层使用哈希表,查询很快
    2. 无序

LinkedHashMap:

    1. 继承HashMap
    2. 有序,底层是哈希表(数组+链表/红黑树)+链表(用来存储数据的顺序)

两者的主要实现方法

    主要的方法:
        public V put(key,value);返回原先key被替换的值
        public V remove(Object key); 把指定的键中的值删除,并且返回被删除的元素的值
        public V get(Object key);  返回键中对应的值,不存在则返回null;
        public boolean containKey(Object key); 是否包含指定的键

代码实现

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

public class HashMapDemo {
    public static void main(String[] args) {

        demo01(); //public V put(key,value);返回原先key被替换的值
        demo02(); //public V remove(Object key); 把指定的键中的值删除,并且返回被删除的元素的值
        demo03(); //public V get(Object key);//得到这个键对应的values
        demo04(); //public  boolean containKey(Object key)//是否包含这个键
    }



    private static void demo01() {
        Map<String, String> map = new HashMap<>();
        String s1 = map.put("hello", "hcr");
        String s2 = map.put("lzf", "lma");
        String s3 = map.put("hello", "wkw");//替换hello这个键中的值

        map.put("lengfeng", "longxiaoyun");
        System.out.println("s1:" + s1);
        System.out.println("s2:" + s2);
        System.out.println("s3:" + s3);

        System.out.println(map);// 输入与输出是没有顺序的
    }

    public static void demo02()
    {
        Map<String,Integer> map = new HashMap<>();
        map.put("lwt",172);
        map.put("ljt",177);
        map.put("ljy",187);

        System.out.println(map);

        Integer i = map.remove("lwt");//删除键,以及返回值
        Integer dyp = map.remove("dyp");
        System.out.println(dyp);//输出为空值
        System.out.println(i);
        System.out.println(map);

    }
    private static void demo03() {
        Map<String,Integer> map = new HashMap<>();
        map.put("lwt",172);
        map.put("ljt",177);
        map.put("ljy",187);

        Integer i1 = map.get("lwt");
        System.out.println(i1);  //172


    }
    private static void demo04() {

        Map<String,Integer> map = new HashMap<>();
        map.put("lwt",172);
        map.put("ljt",177);
        map.put("ljy",187);

        System.out.println(map);

        Integer i = map.remove("lwt");//删除键,以及返回值
        Integer dyp = map.remove("dyp");
        System.out.println(map.containsKey("lwt"));// false
        System.out.println(map.containsKey("ljt"));
    }
}

HashMap的遍历方法

  1. public Set<Key> keySet();
    把map中所有的key中存到set中,键找值
  2. public Set<Map.entry<K,V>> entry();
    Map.Entry<K,V>是一个对象,存入一个entry对象,然后通过获取getKey()以及getValue()的值

具体实现代码

package Demo01.MapDemo;

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

//public Set<Key> keySet();//把map中所有的key中存到set中,键找值
//1.先得到key的集合set
//2.遍历set集合
//3.获取set中的每个对象,对象为key
//4.通过key的值来获取map中对应的values值

//public Set<Map.entry<K,V>> entry();
/*
1.返回的是一个set对象
2.便利set集合
3.遍历set集合
4.获取set集合中的每个对象
5.Entry对象中有两个方法
    getKey()  //得到键
    getValue() //得到值
6.
* */
public class HashMapDemo02 {
    public static void main(String[] args) {
        demo01();

        System.out.println("========================");
        demo02();
    }
    private static void demo01()
    {
        Map<String,Integer> map = new HashMap<>();
        map.put("lwt",172);
        map.put("ljt",177);
        map.put("ljy",187);
        Set<String> set = map.keySet();

//        Iterator<String> it = set.iterator();
        for(String s : set)
        {
            Integer i = map.get(s);
            System.out.println(s+":" +i);
        }
    }
    private static void demo02()
    {
        Map<String,Integer> map = new HashMap<>();
        map.put("lwt",172);
        map.put("ljt",177);
        map.put("ljy",187);
        Set<Map.Entry<String,Integer>> set = map.entrySet();
        for(Map.Entry<String,Integer> E: set)
        {
            System.out.println(E.getKey()+ ": " +E.getValue());
        }

    }
}

HashMap中存取自定义的值

key中一定要复习equasl()和hashCode()方法

LinkedHashMap

主要是有序(记得住存储的顺序),其他没啥

package Demo01.MapDemo;

import java.util.HashMap;
import java.util.LinkedHashMap;

public class LinkedHashMapDemo {
    public static void main(String[] args) {
        HashMap<String,String> map = new HashMap<>();
        map.put("c","c");
        map.put("b","b");
        map.put("a","a");
        map.put("a","d");
        System.out.println(map);
        
        LinkedHashMap<String,String> linked = new LinkedHashMap<>();
        linked.put("c","c");
        linked.put("a","a");
        linked.put("b","b");
        linked.put("a","d");
        System.out.println(linked);
    }
}

//output:
// {a=d, b=b, c=c}
//{c=c, a=d, b=b}

HashMap和HashTable的那些事

HashTable:低层是一个哈希表,是一个线程安全的集合,是单线程集合,速度慢,不可以存储null值也不可以存储null键
HashMap: 底层是一个哈希表,是一个线程不安全的集合,多线程集合,速度快,可以存null值和null键

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值