【146天】尚学堂高淇Java300集视频精华笔记(105-107)

第105集:容器、Map和HashMap的基本用法、hashMap和HashTable的区别

本集知识点

  1. remove删除键值对一次删除一对。

  2. HashMap线程不安全效率高,Hashtable线程安全效率低,两者用法一样

  3. 常用Map方法

    1. Object put(Object key,Object value)

    2. Object get(Object key)

    3. Object remove(Object key)

    4. boolean containsKey(Object key)

    5. boolean containsValue(Object value)

    6. int size()

    7. boolean isEmpty()

    8. void putAll(Map t)

    9. void clear()

package com.collection;

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

/**
 * @author wangtao
 * 测试Map的基本用法
 */
public class TestMap {
    public static void main(String[] args){
        Map map = new HashMap();
        map.put("www", new Wife("jjjj"));
        map.put("fff", new Wife("aaaa"));
        //map.remove("www");
        Wife w = (Wife)map.get("www");
        boolean a = map.containsKey("222");
        System.out.println(w.name);
        System.out.println(a);
        
        
    }
}

class Wife {
    String name;
    public Wife(String name){
        this.name = name;
    }
}

第106集:容器、Map和HashMap的基本用法、hashMap和HashTable的区别

本集知识点

  1. Map是键值对

  2. 通过键找值

  3. 键不可重复,后面键对应的值会覆盖前面的值。

package com.collection;

/**
 * @author wangtao
 * 自定义实现Map功能
 * 存放键值对,根据一个对象找另一个对象
 */

public class SxtMap001 {
    
    SxtEntry[] arr = new SxtEntry[990];
    int size;
    
    public void put(Object key,Object value){
        SxtEntry e = new SxtEntry(key,value);
        //解决键值对的处理
        for(int i=0;i<size;i++){
            if(arr[i].key.equals(key)){
                arr[i].value=value;
                return;
            }
        }
        
        arr[size++] = e;
    }
    
    public Object get(Object key){
        for(int i=0;i<size;i++){
            if(arr[i].key.equals(key)){
                return arr[i].value;
            }
        }
        return null;
    }
    
    public static void main(String[] args){
        SxtMap001 m = new SxtMap001();
        m.put("高琪", "是是");
        m.put("zhen", "DSSS");
        m.put("zhen", "ssss");
        
        System.out.println(m.get("zhen"));
        
    }

    public boolean containsKey(Object key){
        for(int i=0;i<size;i++){
            if(arr[i].key.equals(key)){
                return true;
            }
        }
        return false;
    }
    
    public boolean containsValue(Object value){
        for(int i=0;i<size;i++){
            if(arr[i].value.equals(value)){
                return true;
            }
        }
        return false;
    }
}

class SxtEntry{
    Object key;
    Object value;
    
    public SxtEntry(Object key,Object value){
        super();
        this.key = key;
        this.value = value;
    }    
}

第107集:容器、自己实现HashMap、Map底层实现、哈希算法实现、使用数组和链表

本集知识点

  1. 上一集实现的Map类使用遍历的方式效率低,本集使用的是哈希码查找,效率大幅提升。

  2. Map的底层实现是数组+链表

package com.collection;

import java.util.LinkedList;

public class SxtMap002 {
    LinkedList[] arr = new LinkedList[999];
    int size;
    
    public void put(Object key,Object value){
        SxtEntry e = new SxtEntry(key,value);
        int a = key.hashCode()%arr.length;
        if(arr[a]==null){
            LinkedList list = new LinkedList();
            arr[a] = list;
            list.add(e);
        } else {
            LinkedList list = arr[a];
            for(int i=0;i<list.size();i++){
                SxtEntry e2 = (SxtEntry)list.get(i);
                if(e2.key.equals(key)){
                    e2.value=value;//键值重复直接覆盖。
                    return;
                }
            }
            
            arr[a].add(e);
        }
    }
    
    public Object get(Object key){
        int a = key.hashCode()%999;
        if(arr[a]!=null){
            LinkedList list = arr[a];
            for(int i=0;i<list.size();i++){
                SxtEntry e = (SxtEntry)list.get(i);
                if(e.key.equals(key)){
                    return e.value;
                }
            }
        }
        return null;
    }
    
    
    
    public static void main(String[] args){
        SxtMap001 m = new SxtMap001();
        m.put("高琪", "是是");
        m.put("zhen", "DSSS");
        m.put("zhen", "ssss");
        
        System.out.println(m.get("zhen"));
        
    }
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值