【集合】Java_Map集合的基本概念

Map简介

将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

  Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如HashMap 类。

  注:将可变对象用作映射键时必须格外小心。当对象是映射中某个键时,如果以影响 equals 比较的方式更改了对象的值,则映射的行为将是不确定的。此项禁止的一种特殊情况是不允许某个映射将自身作为一个键包含。虽然允许某个映射将自身作为值包 含,但请格外小心:在这样的映射上 equals 和 hashCode 方法的定义将不再是明确的。

  所有通用的映射实现类应该提供两个“标准的”构造方法:一个 void (无 参数)构造方法,用于创建空映射;一个是带有单个 Map 类型参数的构造方法,用于创建一个与其参数具有相同键-值映射关系的新映射。实际上,后一个构造方法允许用户复制任意映射,生成所需类的一个等价映射。尽 管无法强制执行此建议(因为接口不能包含构造方法),但是 JDK 中所有通用的映射实现都遵从它。

HashMap

最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null(多条会覆盖);允许多条记录的值为 Null。非同步的。

TreeMap

能够把它保存的记录根据键(key)排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。 
Hashtable

与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。 、


LinkedHashMap

保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空,非同步的。 

package edu.xalead;

import java.util.*;
/**
 * 哈希表  稀疏数组  索引位置查找速度快  浪费的空间比较大
 */
public class Test3 {
    public static void main(String[] args) {
        Map m  = new HashMap();
        m.put("afd",new Student("hany",143554,'男'));
        m.put("afs",new Student("kaka",445354,'女'));
        m.put("afa",new Student("kaka",445354,'女'));
        m.put("afb",new Student("tony",757654,'男'));
     // "abs".hashCode()

        System.out.println(m.get("afd"));
        System.out.println(m.get("abc"));//通过键调用其内容
        System.out.println(m.get("afs"));
        

       //Entry 键值相同 value覆盖
        System.out.println(m.get("afa"));
        System.out.println(m.get("afb"));

        //键和值共同输出
        Set s = m.entrySet();
        Iterator iter = s.iterator() ;
        while(iter.hasNext()){
            Map.Entry entry = (Map.Entry)iter.next();
         //iter.next()  返回的是object类型   要强制转换为Map.Entry类型
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }

        //Entry value部分
        Collection c = m.values();//返回的是collection value部分可以重复
        Iterator it = c.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }

        //Entry  key部分   不能重复
        Set ss = m.keySet();
        Iterator itt = ss.iterator();
        while(itt.hasNext()){
            System.out.println(itt.next());
        }


    }
}

测试结果:

  

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值