【从头开始学JAVA】Collection集合 Map

List:

  1. ArrayList底层是数组结构,查询快,增删慢适合查询较多的场景
  2. LinkedList底层是链表结构,查询慢,增删快,适合增删操作较多的场景
  3. 注意:LinkedList查询慢是指数据量大时,查询中间要慢首位操作还是比较快的

Set:

  1. HashSet : 底层是哈希表,包装了HashMap,相当于向HashSet中存入数据时,会把数据作为K,存入内部的HashMap中。当然K仍然不许重复。
  2. TreeSet : 底层是TreeMap,也是红黑树的形式,便于查找数据

 

Map:

Java.util接口Map<K,V>
类型参数 : K - 表示此映射所维护的键 V – 表示此映射所维护的对应的值
也叫做哈希表、散列表. 常用于键值对结构的数据.其中键不能重复,值可以重复

特点:

  • Map可以根据键来提取对应的值
  • Map的键不允许重复,如果重复,对应的值会被覆盖
  • Map存放的都是无序的数据
  • Map的初始容量是16,默认的加载因子是0.75

HashMap

  • 底层是一个Entry[ ]数组,当存放数据时,会根据hash算法来计算数据的存放位置
  • 算法:hash(key)%n , n就是数组的长度,其实也就是集合的容量
  • 当计算的位置没有数据的时候,会直接存放数据
  • 当计算的位置,有数据时,会发生hash冲突/hash碰撞,解决的办法就是采用链表的结构,在数组中指定位置处已有元素之后插入新的元素,也就是说数组中的元素都是最早加入的节点
     

 

Map集合的迭代方式

map迭代的思路
1.map没有属于以自的迭代器
2.map只提供了转set的方法
3.方式一:转成set集合,set中存着的是map的key-->KeySet()
4.方式二:转成set集合,set中存着的是Entry,Entry就是一对键值对

Map迭代代码

package cn.tedu.collection;

import java.util.*;

/**测试Map接口*/
public class TestMap {
    public static void main(String[] args) {


        //1.创建Map对象
        /**Map中的数据要符合映射规则,一定注意要同时指定 K 和 V 的数据类型
         * 至于这个K和V要指定成什么类型的数据,取决于你的具体要求
         * */
        Map<Integer,String> map =new HashMap<>();//导包

        //2.常用方法
        map.put(9527,"白骨精");
        map.put(9528,"黑熊精");
        map.put(9528,"者行孙");
        map.put(9529,"黄毛怪");
        System.out.println(map);
        /**总结1:Map中存放的都是无序的数据
         * * 总结2:Map中的key不可以重复,如果重复,此key对应的Value会被覆盖
         * 打印结果:{9527=白骨精, 9528=者行孙, 9529=黄毛怪},没有黑熊精*/
        //3.测试常用方法
        //map.clear();//清空
        System.out.println(map.containsKey(9528));//true,查看是否包含指定的key
        System.out.println(map.containsValue("土地老二"));//false,查看是否包含指定的vaule
        System.out.println(map.equals("者行孙"));//false,判断"者行孙与map对象是否相等
        System.out.println(map.get(9528));//者行孙,根据指定k获取对应的value
        System.out.println(map.hashCode());
        System.out.println(map.isEmpty());
        System.out.println(map.remove(9528));//删除指定的元素
        System.out.println(map.get(9528));//null,说明映射关系已被移除
        System.out.println(map.size());//个数
        Collection<String> values=map.values();//把map中所有的value收集起来放到Collection集合中
        System.out.println(values);//[白骨精, 黄毛怪]

        /**对map集合遍历迭代*/
        /**方式一
         * 遍历map中的数据,但是map本身没有迭代器,所以需要转换成set集合
         * Set<Key> : 把map集合中的所有Key存到set集合中--keySet()*/
        //1.将map中的key取出存入set集合,集合的泛型就是key的类型Integer
        Set<Integer> keySet =map.keySet();
        //2.想要遍历集合,获取迭代器
        Iterator<Integer> it = keySet.iterator();
        while (it.hasNext()){
            Integer key = it.next();//得到当前遍历到的key
            String value =map.get(key);//通过刚刚得到的key获取对应的value
            System.out.println("{"+key+"="+value +"}");
        }

        /**方式二
         *遍历map中的数据,把map转成set集合,是把map中的一对key&value作为一个Entry整体放入set
         * 一对 k v 是一个Entry
         */
        //所以set存的是Entry对象, Entry的类型是Entry<Integer, String>
        Set<Map.Entry<Integer,String>> entrySet = map.entrySet();
        //2.获取set集合的迭代器Iterator<Map . Entry<Integer, String>>
        Iterator<Map.Entry<Integer,String>> it2= entrySet.iterator();
        //3.循环遍历set集合中的元素
        while (it2.hasNext()){//如果有元素就继续遍历
            //4.获取当前集合遍历到的entry对象
            Map.Entry<Integer,String> entry = it2.next();
            Integer key = entry.getKey();//5.获取当前entry中存着的key
            String value = entry.getValue();//6.获取当前entry中存着的vaLue
            System.out.println("{"+key+"="+value +"}");
        }



    }
}

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值