黑马程序员_Java集合-Map<K,V>接口

来源:互联网 发布:苹果电脑怎么删除软件 编辑:程序博客网 时间:2024/06/05 11:44

---------------------- android培训、java培训、期待与您交流! ----------------------

Map接口可以操作两个值。

比如说:

Key(姓名)   value(电话号码)

张三        123123

李四        456456

王五        789789

这样的数据 就可以使用Map存储。使用的时候根据key值去map中查找与其对应的value值。

Map接口旗下有3个子类:

1. HashMap<K,V>

2. Hashtable<K,V>

3.  TreeMap<K,V>

常用方法:

 

NO.

方法

作用

1

public void clear()

清空所有元素

2

public V put(K key,V value)

设置元素的内容 返回该位置上的旧元素

3

public V get(Object key)

根据提供的键(key) 查找值(value)

4

public boolean containsKey(Object key)

查找指定的key是否存在

5

public boolean containsValue(Object value)

查找指定的value是否存在

6

public boolean isEmpty()

判断集合是否为空

7

public Set<Map.Entry<K,V>> entrySet()

将全部的元素变成一个Set

8

public Set<K> keySet()

将全部的key变成Set

9

public int size()

获取结合元素数量

1

public Collection<V> values()

将所有的value变成collection

1

public V remove(Object key)

指定key删除value

1

public void putAll(Map<? extends K,? extends V> m)

增加一组元素

 

1. HashMap<K,V>

Map中 key值不可以重复。 如果重复了,则新value会覆盖旧value。

如果使用用户自定义类做key 则同样需要同时重写:hashCode()方法和equals()方法。少一个都不行。

 

如果想完整的使用HashMap<K,V>类那么最少要重写equals()和hashCode()方法。

 重写hashCode()  用于获得元素的存储位置。

 重写equals() 用于在两个元素的位置相同的时候 比较两个元素的key是否相等。

2. Hashtable<K,V>

 Hashtable<K,V>和HashMap<K,V>相比 

No.

区别点

HashMap

Hashtable

1

推出版本

JDK1.2

JDK1.0

2

操作

异步操作

同步操作

3

安全性

非线程安全

线程安全

4

性能

比Hashtable 高

 比HashMap 低

3.  TreeMap<K,V>

 

import java.util.*;

public class MapDemo {

    public static void main(String[] args){

       Map<String,String> map = new TreeMap<String,String>();

       map.put("No.1","张三");

       map.put("No.1","李四");

       map.put("No.2","王五");

       map.put("No.3","赵六");

       map.put("No.4","秦七");

       System.out.println(map);

    }

}

程序执行结果:

{No.1=李四, No.2=王五, No.3=赵六, No.4=秦七}

TreeMap类同样不允许key重复。并且会自动排序。

Map集合的输出:

在Map中可以保存两个值。 但是实际上在Map接口内部却不是直接保存这两个值。

在Map接口中真正保存的是一个个MapEntry对象。

在一个MapEntry对象保存的才是map中定义的K和V。

因此在Map中不可以直接使用Iterator接口遍历。

范例:Iterator遍历元素。

import java.util.*;

public class MapDemo {

    public static void main(String[] args){

       Map<Person,String> map = new TreeMap<Person,String>();

       map.put(new Person("张三", 20),"No.1");

       map.put(new Person("李四", 21),"No.2");

       map.put(new Person("李四", 21),"No.3");

       map.put(new Person("王五", 64),"No.4");

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

       Iterator<Map.Entry<Person, String>> iter = set.iterator();

       while(iter.hasNext()){

           Map.Entry<Person, String> temp = iter.next();

           System.out.println(temp.getKey()+"   "+temp.getValue());

       }

    }

}

范例:foreach遍历元素。

import java.util.*;

public class MapDemo {

    public static void main(String[] args){

       Map<Person,String> map = new TreeMap<Person,String>();

       map.put(new Person("张三", 20),"No.1");

       map.put(new Person("李四", 21),"No.2");

       map.put(new Person("李四", 21),"No.3");

       map.put(new Person("王五", 64),"No.4");

       for(Map.Entry<Person, String> temp : map.entrySet())

           System.out.println(temp.getKey()+"   "+temp.getValue());

    }

}

 

---------------------- android培训、java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima