Map集合

来源:互联网 发布:工作站光驱装linux 编辑:程序博客网 时间:2024/05/11 22:15


Map   java.util.包下的  它与Collection集合是同一层次

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

Map与Collection的区别

1.Map集合存储的时候存储的两个  一个是Key  另外一个是Value
 Collection存储就是一个值.

2.Map集合存储元素时使用的是put方法,Collection中使用的是add

3. Collection集合取出元素使用的Iterator。
  Map集合要想取出元素没有迭代器. 它间接使用迭代器  keySet  entrySet


Map集合中的方法
1.向Map集合中存储元素  put

定义 public Object put(Object key,Object value);
使用泛型后
public  V put(K key,V value)

作用 是将 元素存储到集合中,第一个元素做为key,第二元素做为value
    返回值 如果集合中没有key,那么返回null,如果已经存在这样的
key,它的返回值是原来的key对应的value的值。
2.从Map集合中取元素 get方法

定义 public Object get(Object key); 
使用泛型 
public V get(K key)

作用  根据Map集合中的key是到对应的value;如果key不存在,返回null

import java.util.*;class Demo7{public static void main(String[] args) {new MapDemo().method2();}}class MapDemo{//getpublic void method2(){Map<Integer,String> map=new HashMap<Integer,String>();map.put(123,"abc");map.put(1234,"abcd");map.put(456,"hello");String s=map.get(4567);System.out.println(s);//System.out.println(map);}//put方法public void method1(){Map<Integer,String> map=new HashMap<Integer,String>();System.out.println(map.put(123,"abc")); //返回的是nullSystem.out.println(map.put(1234,"abc"));System.out.println(map.put(123,"hello"));//因为map已经存在123这个key,这时就使用hello将abc替换了,将被替换的元素返回.//System.out.println(map); //说明HashMap重写了toString 重写成{key1=value1,key2=value2,...}}}

Map集合中的keySet方法
定义  public Set<K> keySet();
作用  得到Map集合中的所有的Key的Set集合.

import java.util.*;class Demo8 {public static void main(String[] args) {new MapDemo().method1();}}class MapDemo{public void method1(){Map<Integer,Student> map=new HashMap<Integer,Student>();for(int i=0;i<10;i++){map.put(i,new Student());}Set<Integer> set=map.keySet();//得到Map集合中的所有key的Set集合//遍历set这个集合for(Iterator<Integer> it=set.iterator();it.hasNext();){int key=it.next();System.out.println("KEY:"+key+"  VALUE:"+map.get(key)); //得到了Map集合中的所有key的值}}}class Student{}

Map集合特点
1.Map存储元素是以Key,Value的方式 存储的.
2.Map集合的key不能重复  key是唯一的。
3.Map集合要遍历集合中的元素,不能使用迭代器。
 第一种遍历方式   keySet方法得到所有的key的Set集合,在通过get方法,通过key值得到对应的value的值.
 第二种遍历方式   entrySet方法得到Set集合,这个集合中存储的是key-value的映射对象 Map.Entry类型.
在通过遍历Set集合得到每一个Map.Entry对象,通过Map.Entry对象的getKey,getValue方法得到所有的key与value;

import java.util.*;class Demo9 {public static void main(String[] args) {Map<Integer,String> map=new HashMap<Integer,String>();map.put(123,"abc");map.put(423,"akc");map.put(163,"obc");/*//第一种方式//1.得到所有的key的Set集合Set<Integer> keys=map.keySet();//2.对这个Set集合进行遍历,得到Map集合中的所有的key值for(Iterator<Integer> it=keys.iterator();it.hasNext();){int key=it.next();//3.通过key得到对应的valueString value=map.get(key);System.out.println("KEY:"+key+"   VALUE:"+value);}*///第二种方式//1.得到Map集合中的key-value映射关系  Map.Entiry类型Set<Map.Entry<Integer,String>> set=map.entrySet();//Map.Entry这个就是Map接口中定义的一个静态的内部接口Entry接口。//2.遍历Set集合将集合中的所有有key-value的映射关系得到for(Iterator<Map.Entry<Integer,String>> it=set.iterator();it.hasNext();){Map.Entry<Integer,String> kv=it.next();//3.通过Map.Entry这个接口中提供的方法 getKey  getValue得到Map集合中的元素int key=kv.getKey();String value=kv.getValue();System.out.println("KEY:"+key+"  VALUE:"+value);}}}/*interface Map{static interface Entry{}}*/

Map中定义的其它方法
1.clear
定义 public void clear();
作用 清空Map信中的所有映射关系.简单说就是将Map集合中元素全删除

2.containsKey  containsValue
定义 public boolean containsKey(Object k)
泛型 public boolean containsKey(K k)
作用 是判断Map集合是否包含k这样的key值

定义 public boolean containsValue(Object v)
泛型 public boolean containsValue(V v)
作用 是判断Map集合是否包含v这样的Value值

3. isEmpty
定义  public boolean isEmpty()

作用  判断Map集合中是否有映射关系,如果没有返回true。
     简单说就是判断Map集合中是否有元素。

4.remove
定义 public Object remove(Object k)
泛型 public V remove(Object k)
作用 根据Key去删除Map集合中的映射关系   如果没有对应的key,返回null

5.values方法
定义  public Collection values();

作用  得到Map集合中的所有的value的Collection的视图

import java.util.*;class Demo10 {public static void main(String[] args) {new MapDemo().method4();}}class MapDemo{//clearpublic void method1(){Map<Integer,String> map=new HashMap<Integer,String>();map.put(1,"a");map.put(2,"b");map.put(3,"c");map.clear();System.out.println(map.size());}//containsKey  containsValuepublic void method2(){Map<Integer,String> map=new HashMap<Integer,String>();map.put(1,"a");map.put(2,"b");map.put(3,"c");System.out.println(map.containsKey(11));System.out.println(map.containsValue("aa"));}//removepublic void method3(){Map<Integer,String> map=new HashMap<Integer,String>();map.put(1,"a");map.put(2,"b");map.put(3,"c");String v=map.remove(1);System.out.println(map.size());System.out.println(v);}//valuespublic void method4(){Map<Integer,String> map=new HashMap<Integer,String>();map.put(1,"a");map.put(2,"b");map.put(3,"c");Collection<String> c=map.values();for(Iterator<String> it=c.iterator();it.hasNext();){System.out.println(it.next());}}}

Map接口下的实现类的特点

Map
1.-HashMap    基于Hash表的Map实现。它允许null值与null键 是非同步的.
 |----LinkedHashMap 它是有顺序的,存入顺序与取出顺序一致. 

2.-Hashtable  基于Hash表的Map实现 不允许null值与null键  是同步的 
 |-----Properties 类 它是一个映射关系集,IO中会用到.在EE开发中经常见到xxx.properties文件,可以将
  Properties这个类看成成是这个文件的映射对象.

3.TreeMap  基于二叉树的实现  TreeMap集合中有顺序的 维护唯一关系也是通过元素的自然顺序与比较器
这种操作都是基于Map集合中的Key操作。

为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法


原创粉丝点击