Map使用键值对来存储数据,将键映射到值对象,一个映射不能包含重复的键,每一个键最多只能映射到一个值。Map接口的具体实现类:HashMap,Hashtable,TreeMap,LinkedHashMap

1)HashMap

  基于哈希表(哈希表学习地址)的Map接口实现。允许使用null值和null键,不保证映射的顺序,特别是不保证顺序恒久不变。它除了非同步和允许使用null外,与Hashtable大致相同。

  HashMap实现原理:

  1.HashMap默认数组大小为16,加载因子为0.75,当数组使用量达到数组长度*加载因子时,需要进行扩充。

  2.HashMap是以数组为头,连接链表形成的(要计算key的hashcode值),根据散列值求出对象在哈希表的存储位置,相同位置上的多个数据以链表方式连接,每次先加入的对象放进链表头。

  示例代码:

  Java代码

publicstaticvoidmain(String[] args){

Map<Integer, String>maps=newHashMap<Integer, String>();

maps.put(1,"小黑");

maps.put(2,"小白");

maps.put(null,null);

maps.put(10, "老王");

System.out.println("size: "+maps.size());

//根据key获取对象值

System.out.println(maps.get(10));

//是否存在此键

System.out.println(maps.containsKey(2));

//是否存在此值

System.out.println(maps.containsValue(null));

//遍历

Set<Entry<Integer,String>>entry=maps.entrySet();

Iterator<Entry<Integer,String>>iter=entry.iterator();

while(iter.hasNext())

{

System.out.println(iter.next());

}

//清除map

maps.clear();

}

  HashMap是线程不安全的,非同步的,当需要重新散列时,数组扩大为原来的两倍,将会把所有数据重新进行插入,此时可能会破换原来的顺序,所有HashMap不能保证映射顺序。HaspMap的重新散列会影响性能。

2)Hashtable

  此类实现了哈希表,该哈希表将键映射到相对应的值。任何非null都可以用作键或值,为了成功的在哈希表中存储和获取对象,用作键的对象必须实现hashCode方法和equals方法。

  用法基本和HashMap相同,不过多介绍

HashMap和Hashtable的区别

  1.HashMap可以使用null作为键或值,Hashtable不可以

  2.HashMap是非同步的,线程不安全,而Hashtable是同步的,线程安全

  3.Hashtable的默认容量为11,而HashM的默认容量为16。

3)TreeMap

  基于红黑树显示的,该映射根据其键的自然排序进行排序,或者根据创建映射时提供的Comparator进行排序。所以,TreeMap使用自定义类作为key时要实现Comparable接口。

  如:

  自定义Person类,实现Comparable接口。使用age属性进行排序

  Java代码

publicclassPerson implementsComparable<Person>{

publicString name;

publicintage;

publicPerson(String name,intage)

{

this.name=name;

this.age=age;

}

publicintcompareTo(Person o) {

if(o==null)

thrownewNullPointerException();

if(this.age>o.age)

return1;

if(this.age<o.age)

return-1;

return0;

}

@Override

publicString toString() {

return"Person [name="+ name + ", age="+ age + "]";

}

}

  调用代码:

  Java代码

publicstaticvoidmain(String[] args){

Map<Integer, String>maps=newTreeMap<Integer, String>();

maps.put(1,"小黑");

maps.put(2,"小白");

maps.put(10, "老王");

//遍历

Set<Entry<Integer,String>>entry=maps.entrySet();

Iterator<Entry<Integer,String>>iter=entry.iterator();

while(iter.hasNext())

{

System.out.println(iter.next());

}

//清除map

maps.clear();

//-----------------------------使用自定义Person做key

Map<Person, String>map=newTreeMap<Person, String>();

map.put(newPerson("xiaobai", 20), "xiaobai");

map.put(newPerson("xiaohei", 18), "xiaohei");

map.put(newPerson("xiaohong", 30), "xiaohong");

//遍历

Set<Entry<Person,String>>entry1=map.entrySet();

Iterator<Entry<Person,String>>iter1=entry1.iterator();

while(iter1.hasNext())

{

System.out.println(iter1.next());

}

//清除map

map.clear();

}

  运行结果:

技术分享:www.kaige123.com

Java集合之Map接口的更多相关文章

  1. Java集合框架Map接口

    集合框架Map接口 Map接口: 键值对存储一组对象 key不能重复(唯一),value可以重复 常用具体实现类:HashMap.LinkedHashMap.TreeMap.Hashtable Has ...

  2. Java集合中Map接口的使用方法

    Map接口 Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value: Map中的键值对以Entry类型的对象实例形式存在: 建(key值 ...

  3. Java集合框架——Map接口

    第三阶段 JAVA常见对象的学习 集合框架--Map集合 在实际需求中,我们常常会遇到这样的问题,在诸多的数据中,通过其编号来寻找某一些信息,从而进行查看或者修改,例如通过学号查询学生信息.今天我们所 ...

  4. JAVA集合框架 - Map接口

    Map 接口大致说明(jdk11): 整体介绍: 一个将键映射到值的(key-value)对象, 键值(key)不能重复, 每个键值只能影射一个对象(一一对应). 这个接口取代了Dictionary类 ...

  5. Java:集合,Map接口框架图

    Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合.Java 5之后,增加了Queue体系集合, ...

  6. Java集合——集合框架Map接口

    1.Map接口 public interface Map<K,V>将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.  2.HashMap.Hashtable.Tr ...

  7. java集合 之 Map集合

    Map用于保存具有映射关系的数据,具有两组值:一组用于保存Map中的key:另一组用于保存Map中的value,形成key-value的存储形式. Map集合中包含的一些方法: void clear( ...

  8. Java集合之Collection接口

    java的集合分为三大接口,分别是Collection,Map,Iterator,集合接口和类在java.util包中,此次主要介绍三大接口之一的Collection接口. 一些Collection允 ...

  9. java 集合(Map)

    -------------------|Map  储存的数据都是以键值对的形式,键不可重复,值可重复. ----------------------------| HashMap ---------- ...

随机推荐

  1. mac os 显示文件列表命令 ls -a

    显示正常文件列表用ls就行了,但是要是想显示隐藏的文件,需要加-a

  2. python基础——字符串和编码

    python基础——字符串和编码 字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用 ...

  3. .NET委托解析

    委托这个概念其实我们都很熟悉了,但是在使用的时候很多人还是无法去把控它,我们可以试想一下,在平时编码的时候,你是直接按照业务逻辑直接创建类,new出一个对象来进行操作的还是说有用到委托来更高效的完成一 ...

  4. javascript二叉树基本功能实现

    都是常用的功能. 删除是最复杂的.. <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  5. Android SeekBar自定义使用图片和颜色显示

    案例使用的图片如下:                            1.在res/drawable目录下新增一个xml风格文件,seekbar_define_style.xml ? 1 2 3 ...

  6. Activity使用Serializable传递对象实例

    public class SerializableBook implements Serializable { private static final long serialVersionUID = ...

  7. JVM的本地方法栈

    对于一个运行中的Java程序而言,它还可能会用到一些跟本地方法相关的数据区.当某个线程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限制的世界.本地方法可以通过本地方法接口来访问虚拟机的运行 ...

  8. 使用NGUINGUI的相关介绍

    1.3  使用NGUI 要使用NGUI,需要首先为游戏项目导入NGUI插件资源,然后再创建UI Root对象,在这以后才可以添加各种UI控件,下面本节会详解介绍这些知识本文选自NGUI从入门到实战! ...

  9. POJ2778 DNA Sequence(AC自动机+矩阵快速幂)

    题目给m个病毒串,问不包含病毒串的长度n的DNA片段有几个. 感觉这题好神,看了好久的题解. 所有病毒串构造一个AC自动机,这个AC自动机可以看作一张有向图,图上的每个顶点就是Trie树上的结点,每个 ...

  10. Complete the Sequence[HDU1121]

    Complete the Sequence Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...