关于Map接口的方法的使用及其Map下的子类的使用

原创 2015年10月10日 10:56:20
前言:
1> Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value
2> Map 中的 key 和  value 都可以是任何引用类型的数据
3> Map 中的 key 用Set来存放,不允许重复,即同一个 Map 对象所对应的类,须重写hashCode()和equals()方法。
4> 常用String类作为Map的“键”。(这是因为hashCode()和equals()方法无需再重写
5> key 和 value 之间存在单向一对一关系,即通过指定的 key 总能找到唯一的、确定的 value。

Map接口常用的方法:
1>添加、删除操作:
Object put(Object key,Object value)
Object remove(Object key)
void putAll(Map t)
void clear()
2>元素查询的操作:
Object get(Object key)
boolean containsKey(Object key)
boolean containsValue(Object value)
int size()
boolean isEmpty()
boolean equals(Object obj)
3>元视图操作的方法:
Set keySet()
Collection values()
Set entrySet()

Map接口的常见方法的使用及Map的子类的使用方法的代码示例如下:
package com.atguigu.java;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.TreeMap;

import org.junit.Test;

/*
 * Collection接口
 * 
 * Map接口
 *     	 |-----HashMap:Map的主要实现类
 *     	 |-----LinkedHashMap:使用链表维护添加进Map中的顺序。故遍历Map时,是按添加的顺序遍历的。
 *     	 |-----TreeMap:按照添加进Map中的元素的key的指定属性进行排序。要求:key必须是同一个类的对象!
 * 针对key:自然排序   vs 定制排序
 *     |-----Hashtable:古老的实现类,线程安全,不建议使用。
 *         |----Properties:常用来处理属性文件。键和值都为String类型的
 */
public class TestMap {
    //使用Properties处理属性文件
    @Test
    public void test6() throws FileNotFoundException, IOException{
        Properties pros = new Properties();
        pros.load(new FileInputStream(new File("jdbc.properties")));
        String user = pros.getProperty("user");
        System.out.println(user);
        String password = pros.getProperty("password");
        System.out.println(password);
    }




jdbc.properties文件的内容如下:

user=root
password=123abc


<strong>    // 定制排序</strong>
    @Test
    public void test5() {
        Comparator com = new Comparator() {
            public int compare(Object o1, Object o2) {
                if (o1 instanceof Customer && o2 instanceof Customer) {
                    Customer c1 = (Customer) o1;
                    Customer c2 = (Customer) o2;
                    int i = c1.getId().compareTo(c2.getId());
                    if (i == 0) {
                        return c1.getName().compareTo(c2.getName());
                    }
                    return i;
                }
                return 0;
            }
        };
        TreeMap map = new TreeMap(com);
        map.put(new Customer("AA", 1001), 87);
        map.put(new Customer("CC", 1001), 67);
        map.put(new Customer("MM", 1004), 77);
        map.put(new Customer("GG", 1002), 97);

        Set set1 = map.keySet();
        for (Object obj : set1) {
        System.out.println(obj + "----->" + map.get(obj));
        }
    }



Customer的代码示例如下:
package com.atguigu.java;

public class Customer {
    private String name;
    private Integer id;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Customer(String name, Integer id) {
        super();
        this.name = name;
        this.id = id;
    }
    public Customer() {
        super();
    }
@Override
    public String toString() {
        return "Customer [name=" + name + ", id=" + id + "]";
    }
@Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
@Override
    public boolean equals(Object obj) {
        if (this == obj)
        return true;
        if (obj == null)
        return false;
        if (getClass() != obj.getClass())
        return false;
        Customer other = (Customer) obj;
        if (id == null) {
            if (other.id != null)
                return false;
            } else if (!id.equals(other.id))
            return false;
            if (name == null) {
                if (other.name != null)
                return false;
                } else if (!name.equals(other.name))
                return false;
            return true;
    }

}


<strong>// 自然排序</strong>
    @Test
    public void test4() {
        Map map = new TreeMap();
        map.put(new Person("AA", 23), 89);
        map.put(new Person("MM", 22), 79);
        map.put(new Person("GG", 23), 99);
        map.put(new Person("JJ", 13), 69);

        Set set1 = map.keySet();
        for (Object obj : set1) {
            System.out.println(obj + "----->" + map.get(obj));
        }
    }




Person的代码示例如下:
package com.atguigu.java;

public class Person implements Comparable{
    private String name;
    private Integer age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Person() {
        super();
    }
    public Person(String name, Integer age) {
        super();
        this.name = name;
        this.age = age;
    }
@Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
    //static int init = 1000;
@Override
    public int hashCode() {//return age.hashCode() + name.hashCode();没下述的健壮性好。
    final int prime = 31;
    int result = 1;
    result = prime * result + ((age == null) ? 0 : age.hashCode());
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    return result;
    //return init++;//不能这样用
    }
@Override
    public boolean equals(Object obj) {
    if (this == obj)
    return true;
    if (obj == null)
    return false;
    if (getClass() != obj.getClass())
    return false;
    Person other = (Person) obj;
    if (age == null) {
        if (other.age != null)
            return false;
        } else if (!age.equals(other.age))
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
            } else if (!name.equals(other.name))
            return false;
        return true;
    }
//当向TreeSet中添加Person类的对象时,依据此方法,确定按照哪个属性排列。
@Override
    public int compareTo(Object o) {            //这个需要先继承comparable接口,然后手动重写compareTo()方法
        if(o instanceof Person){
            Person p = (Person)o;
            //return this.name.compareTo(p.name);
            //return -this.age.compareTo(p.age);
            int i = this.age.compareTo(p.age);
            if(i == 0){
                return this.name.compareTo(p.name);
            }else{
                return i;
            }
        }
        return 0;
    }

}


    @Test
    public void test3() {
        Map map = new LinkedHashMap();
        map.put("AA", 213);
        map.put("BB", 45);
        map.put(123, "CC");
        map.put(null, null);
        map.put(new Person("DD", 23), 89);

        Set set1 = map.keySet();
        for (Object obj : set1) {
            System.out.println(obj + "----->" + map.get(obj));
        }
    }


/*
* 如何遍历Map Set keySet() Collection values() Set entrySet()
*/
    @Test
    public void test2() {
        Map map = new HashMap();
        map.put("AA", 213);
        map.put("BB", 45);
        map.put(123, "CC");
        map.put(null, null);
        map.put(new Person("DD", 23), 89);


// 1.遍历key集。
        Set set = map.keySet();
        for (Object obj : set) {
            System.out.println(obj);
        }
// 2.遍历value集
        Collection values = map.values();
        Iterator i = values.iterator();
        while (i.hasNext()) {
            System.out.println(i.next());
        }
// 3.如何遍历key-value对。
    // 方式一:
    Set set1 = map.keySet();
    for (Object obj : set1) {
        System.out.println(obj + "----->" + map.get(obj));
    }
// 方式二:
    Set set2 = map.entrySet();
        for (Object obj : set2) {
            Map.Entry entry = (Map.Entry) obj;
            // System.out.println(entry.getKey() + "---->" + entry.getValue());
            System.out.println(entry);
        }
    }


/*
* Object put(Object key,Object value):向Map中添加一个元素 Object remove(Object
* key):按照指定的key删除此key-value void putAll(Map t) void clear():清空 Object
* get(Object key):获取指定key的value值。若无此key,则返回null boolean containsKey(Object
* key) boolean containsValue(Object value) int size():返回集合的长度 boolean
* isEmpty() boolean equals(Object obj)
* 
* HashMap: 1.key是用Set来存放的,不可重复。value是用Collection来存放的,可重复
* 一个key-value对,是一个Entry。所有的Entry是用Set存放的,也是不可重复的。
* 2.向HashMap中添加元素时,会调用key所在类的equals()方法,判断两个key是否相同。若相同 则只能添加进后添加的那个元素。
*/


@Test
    public void test1() {
    Map map = new HashMap();
    map.put("AA", 213);
    map.put("BB", 456);
    map.put("BB", 45);
    map.put(123, "CC");
    map.put(null, null);
    map.put(new Person("DD", 23), 89);
    map.put(new Person("DD", 23), 87);
    System.out.println(map.size());
    System.out.println(map);
    map.remove("BB");
    System.out.println(map);
    Object value = map.get(1234);
    System.out.println(value);
    }
}





版权声明:本文为博主原创文章,转载请注明出处

Map的取值方式介绍

values():方法是获取集合中的所有的值----没有键,没有对应关系, KeySet():将Map中所有的键存入到set集合中。因为set具备迭代器iterator()方法。所...
  • suwu150
  • suwu150
  • 2016年08月20日 11:39
  • 1618

Java多线程知识小抄集(一)

(http://blog.csdn.net/u013256816/article/details/51325246) 本文主要整理博主遇到的Java多线程的相关知识点,适合速记,故命...
  • casablancaagnes_3sdf
  • casablancaagnes_3sdf
  • 2016年08月24日 13:55
  • 61

Map接口及其子类

Map接口操作的是一对对象,即二元偶对象,Map接口中的每个元素都使用"key--value"的形式存储在集合中. SortedMap接口是排序接口,只要是实现了此接口的子类,都属于排序的子类.Tr...
  • pengkv
  • pengkv
  • 2014年07月12日 14:18
  • 2577

Java类集框架——Map接口(Map.Entry接口 Map常用子类HashMap、Hashtable、TreeMap、WeakHashMap)的使用

学习目标 掌握Map接口与Collection接口的不同。 掌握Map与Map.Entry接口的关系。 掌握Map接口常用的子类:HashMap、Hashtable、TreeMap、WeakHashM...
  • u013087513
  • u013087513
  • 2016年08月19日 14:31
  • 1170

Map的一些子类的用法和区别

最常用的是HashMap: import java.util.HashMap; import java.util.Map; import java.util.HashSet; import java...
  • u012289441
  • u012289441
  • 2014年08月28日 13:49
  • 546

List接口及其实现类、Map接口及其实现类

List接口及其实现类: 特点:其元素以线性方式存储;           元素可重复;           元素有序;           可以对元素的位置精确控制; 实现类:ArrayList  ...
  • u012843873
  • u012843873
  • 2016年07月05日 10:12
  • 2366

学习笔记I/O篇之五

 import java.util.*;import java.io.*;import java.nio.charset.*;public class  CharsetTest...{    publ...
  • fakir08
  • fakir08
  • 2007年05月31日 15:23
  • 433

强大的Map及其子类

Map:一次添加一对元素。Collection 一次添加一个元素。     Map也称为双列集合,Collection集合称为单列集合。     其实map集合中存储的就是键值对。     map集...
  • huangxiaolist
  • huangxiaolist
  • 2016年10月23日 21:15
  • 941

Map接口实现类HashMap之实现原理

大家都知道,HashMap是我们平时在编程过程中经常用到的一个容器类,我们大部分的coder都只是知道其比较快,特别是在查找的时候,但是HashMap内部具体是如何实现的,如何保证这种实现能够很快的去...
  • zhangronghua309
  • zhangronghua309
  • 2013年10月11日 18:18
  • 927

Java-Map和List类中子类的区别

HashMap与HashTable都是java的集合类,都可以用来存放java对象,这是他们的相同点,但是他们也有区别: 一、历史原因 HashTable是基于陈旧的Dictionary类的,...
  • u013943420
  • u013943420
  • 2017年03月20日 19:10
  • 329
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于Map接口的方法的使用及其Map下的子类的使用
举报原因:
原因补充:

(最多只允许输入30个字)