Java集合框架之Map

Map介绍

在之前的学习中,我们学习了集合框架的Set和List,今天主要想讲一讲Map的一些知识点。而我本人也是第一次学习集合框架。前面我们知道了,Set和List。在Set中,元素有序不可重复;List中,元素有序,可重复。
而在Map当中,由于Map是映射,由键值对(Key-Value)组成的,所以,它的键不可重复,值可重复。

Map特点

位于包:jva.util.Map
特点:

  • 1、是一个双列的数据模型
  • 2、所存储的对象称为键值对,同一对象中,键唯一,值可重复
  • 3、Map底层通过hash表进行数据存储
  • JDK1.8之前hash表通过数组+链表的方式实现//提高查询效率之后hash表通过数组+链表+红黑树//链表长度大于八时,由链表转换为红黑树,进一步提升效率
  • 4、常用实现类:
  • HashMap:存储键值对,无序
  • HashTable: 无序,线程安全
    ----Properties(子类):读取配置文件
  • LinkedHashMap:存储键值对,无序
Map接口的实现

在这里插入图片描述

1、HashMap介绍

HashMap存放键值对,<Key,Value>其中,键值不可重复,值可重复。
1)构造方法:
HashMap(int initialCapacity)

      构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。

HashMap(int initialCapacity)

      构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap。

HashMap(int initialCapacity, float loadFactor)

      构造一个带指定初始容量和加载因子的空 HashMap。

HashMap(Map<? extends K,? extends V> m)

      构造一个映射关系与指定 Map 相同的新 HashMap。

2)常用方法
void clear() 从此映射中移除所有映射关系。
boolean containsKey(Object key)
   如果此映射包含对于指定键的映射关系,则返回 true。
boolean containsValue(Object value)
    如果此映射将一个或多个键映射到指定值,则返回 true。
Set<Map.Entry<K,V>> entrySet()
返回此映射所包含的映射关系的 Set 视图。
Set keySet()
返回此映射中所包含的键的 Set 视图。
boolean isEmpty()
如果此映射不包含键-值映射关系,则返回 true。
V put(K key, V value)
在此映射中关联指定值与指定键。(返回值为被替换的Value)
代码(主要是entrySet和KeySetd的使用):

//指定泛型时需要同时指定Key、Value的类型
 Map<Integer,String> map=new HashMap<Integer,String>();
 map.put(011, "小明");
 map.put(102, "王二");
 map.put(013, "张山");
 map.put(014, "李四");
 System.out.println(map.containsKey(014));//找键值为015的是否存在
 System.out.println(map.containsValue("小明"));//找值为小明的是否存在
 //set KeySet的应用,遍历
 Set<Integer> se=map.keySet();//将Map的键取出来放于,Set集合中,用于遍历
 //Map本身没有迭代器,不能遍历输出。
 Iterator it=se.iterator();//Set执行遍历操作
 while(it.hasNext()) {
  Integer a=(Integer) it.next();
  System.out.println("键值为:"+a+"  "+"值为:"+map.get(a));
 }
 System.out.println("--------------------");
 //EntrySet的应用
 //public Set<Map.Entry<K,V>> entrySet()
 Set<Entry<Integer,String>>sr=map.entrySet();//得到Entry集合。下面对其使用迭代器
 Iterator ip=sr.iterator();
 while(ip.hasNext()) {
  Entry<Integer,String> sw=(Entry<Integer, String>) ip.next();
  //Entry的sw对象可以分别取Key和Value
  System.out.println("键为:"+sw.getKey()+"  "+"值为:"+sw.getValue());
 }
 //增强for循环
 System.out.println("-------==================------------");
 for(Entry<Integer,String> c:sr) {
  System.out.println(c.getKey()+"   "+c.getValue());
 }
2、HashTable和TreeMap

此处略略略。
值得一提的是HashTable是线程安全的。不过一般不太用它了。
但是它的一个子类在经常被使用:
----Properties(子类):读取配置文件。
感兴趣的可以自己去查询相关资料。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值