javase:Map接口

散列表的概念

使用空间换时间,使用索引提高效率,把数组通过散列算法,将数据分离开来,存储于连续的内存空间中(数组)。将散列值作为数组的下边,如果散列值有重复的,将重复的数据放置在“散列桶”中,散列桶是线性表,那么能够快速通过散列值(或者下标)可以快速查找数据
在这里插入图片描述

注意:散列表的容积率达到75%时,效率最高,如果超过容积率75%时,列表自动扩容为原长度的的两倍,进行重新散列

Map接口实现类

①HashMap key-value键值对 查找效率最高
②Hashtable类 key-value线程安全
③Properties 类 字符串键值对
④TreeMap类 自然升序

Map接口API

package MapDemo;

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

public class MapDemo {

    public static void main(String[] args) {
        //1.创建一个HashMap
        Map map = new HashMap();
        //2.添加元素(数组中位置,添加链表元素)
        // a)key不可重复,value可以重复
        // b)key只能有一个null
        // c)Map接口查找效率是所有集合中最高的
        map.put(1,"A");
        map.put(2,"B");
        map.put(3,"C");
        map.put(4,"C");
        map.put(1,"T");
        map.put(2,null);
        map.put(null,"F");
        map.put(null,"E");
        System.out.println("map集合里内容:"+map);//map集合里内容:{null=E, 1=T, 2=null, 3=C, 4=C}

        //3.获取元素
        Object obj = map.get(1);
        System.out.println("obj:"+obj);//obj:T

        //4.判断集合中是否包含对应的key
        System.out.println("是否包含:"+map.containsKey(1));//是否包含:true

        //5.判断集合中是否包含value对象
        System.out.println("是否包含:"+map.containsValue("E"));//true

        //6.集合是否为空
        System.out.println("集合是否为空:"+map.isEmpty());//true

        //7.获取集合元素个数
        System.out.println("集合元素个数:"+map.size());//集合元素个数:5

        //8.remove移除
        //System.out.println(map.remove(1));//T 返回移除的对象

        //9.将Map集合value转换成数组
        Collection c = map.values();
        System.out.println(c);//[E, T, null, C, C]

        //10.HashSet HashMap的key
        Set keySet = map.keySet();
        System.out.println(keySet);//[null, 1, 2, 3, 4]

        for(Object key : keySet){
            System.out.println("key:"+key+"value:"+map.get(key));//key:nullvalue:E  key:1value:T  key:2value:null  key:3value:C  key:4value:C
        }

        //11.将Map集合转换成Set集合   将Map中的key和value看成一个整体
        Set set = map.entrySet();
        System.out.println(set);//[null=E, 1=T, 2=null, 3=C, 4=C]
        for(Object object : set){
            Entry entry = (Entry)object;
            System.out.println(entry.getKey()+":"+entry.getValue());//1:T 2:null 3:C 4:C
        }


    }

}

HashMap特点

①初始化容量16,加载因子0.75
②非线程安全
③当集合在迭代过程中,不允许,map自身进行增加,删除操作,只能通过迭代器完成

HashMapAPI

与Map的API基本相同

TreeMap特点

①原理:二叉树算法的实现,进行自然排序
②默认容量为0
③非线程安全的
④在集合迭代过程中,不允许map自身进行增加,删除操作,只能通过迭代器完成

Demo

import java.util.HashMap;
import java.util.TreeMap;

public class TreeMapDemo2 {
    public static void main(String[] args) {
        //1.定义一个HashMap
        HashMap hashMap = new HashMap();
        //2.增加元素
        hashMap.put(100,"A");
        hashMap.put(20,"B");
        hashMap.put(10,"C");
        hashMap.put(140,"D");
        hashMap.put(145,"E");
        hashMap.put(40,"F");
        hashMap.put(53,"G");

        System.out.println(hashMap);//{145=E, 100=A, 20=B, 53=G, 40=F, 10=C, 140=D}

        //3.创建一个TreeMap
        TreeMap tree = new TreeMap(hashMap);
        System.out.println(tree);//{10=C, 20=B, 40=F, 53=G, 100=A, 140=D, 145=E}  //按key排序
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值