Java学习笔记32(集合框架六:Map接口)

2018-01-14 19:07:18来源:cnblogs.com作者:一清人点击

分享

Map接口与Collection不同:

Collection中的集合元素是孤立的,可理解为单身,是一个一个存进去的,称为单列集合

Map中的集合元素是成对存在的,可理解为夫妻,是一对一对存进去的,称为双列集合

Map中存入的是:键值对,键不可以重复,值可以重复

Map接口中的常用集合:

1.HashMap:哈希表的存储结构,但是无法保证存取顺序

2.LinkedHashMap:存储数据采用的是哈希表和链表,可以有顺序

Map接口的常用方法:

示例:

package demo;import java.util.HashMap;import java.util.Map;public class MapDemo {    public static void main(String[] args) {        function1();        function2();        function3();    }    public static void function1() {        // 将键值对存储到集合中        Map<String, Integer> map = new HashMap<String, Integer>();        map.put("a", 1);        map.put("b", 2);        map.put("c", 3);        map.put("c", 4);        System.out.println(map);        // {b=2, c=4, a=1}        // =连接键值对,存入重复键,则会覆盖    }    public static void function2() {        //通过键获取值        Map<Integer, String> map = new HashMap<Integer, String>();        map.put(1, "a");        map.put(2, "b");        map.put(3, "c");        String value = map.get(1);        System.out.println(value);//a        //有则返回值,不存在返回null    }    public static void function3(){        //移除集合中的键值对        Map<Integer, String> map = new HashMap<Integer, String>();        map.put(1, "a");        map.put(2, "b");        map.put(3, "c");        map.remove(3);        System.out.println(map);        //{1=a, 2=b}    }}

Map接口的遍历:

第一种方式:

package demo;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;public class MapDemo {    public static void main(String[] args) {        function1();        function2();    }    public static void function1() {        Map<String, Integer> map = new HashMap<String, Integer>();        map.put("a", 1);        map.put("b", 2);        map.put("c", 3);        map.put("d", 4);        Set<String> set = map.keySet();        Iterator<String> it = set.iterator();        while (it.hasNext()) {            String key = it.next();            Integer value = map.get(key);            System.out.println(key + "<==>" + value);        }    }    public static void function2() {        Map<String, Integer> map = new HashMap<String, Integer>();        map.put("a", 1);        map.put("b", 2);        map.put("c", 3);        map.put("d", 4);        for (String key : map.keySet()) {            Integer value = map.get(key);            System.out.println(key + "<==>" + value);        }    }}// 遍历输出的无序

第二种方式(根据映射关系):

package demo;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.Set;public class MapDemo {    public static void main(String[] args) {        Map<Integer, String> map = new HashMap<Integer, String>();        map.put(1, "a");        map.put(2, "b");        map.put(3, "c");        Set<Entry<Integer, String>> set = map.entrySet();        Iterator<Entry<Integer, String>> it = set.iterator();        while (it.hasNext()) {            Entry<Integer, String> entry = it.next();            Integer key = entry.getKey();            String value = entry.getValue();            System.out.println(key + "<==>" + value);        }    }}

存储自定义对象:

package demo;public class Person {    private String name;    private int age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public Person(String name, int age) {        super();        this.name = name;        this.age = age;    }    public Person() {        super();        // TODO Auto-generated constructor stub    }    @Override    public String toString() {        return "Person [name=" + name + ", age=" + age + "]";    }    @Override    public int hashCode() {        final int prime = 31;        int result = 1;        result = prime * result + age;        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;        Person other = (Person) obj;        if (age != other.age)            return false;        if (name == null) {            if (other.name != null)                return false;        } else if (!name.equals(other.name))            return false;        return true;    }}
package demo;import java.util.HashMap;import java.util.Map;import java.util.Map.Entry;//存储自定义类型public class HashMapDemo {    public static void main(String[] args) {        function1();        function2();    }    public static void function1() {        // 自定义类型作为值出现        HashMap<String, Person> map = new HashMap<String, Person>();        map.put("a", new Person("1", 20));        map.put("b", new Person("2", 20));        map.put("c", new Person("3", 20));        // 利用两种遍历        for (String key : map.keySet()) {            Person value = map.get(key);            System.out.println(key + "<==>" + value);        }        for (Entry<String, Person> entry : map.entrySet()) {            String key = entry.getKey();            Person value = entry.getValue();            System.out.println(key + "<==>" + value);        }    }    public static void function2() {        // 自定义类型作为键出现        // 保证键的唯一性,需要重写hashcode和equals方法        HashMap<Person, String> map = new HashMap<Person, String>();        map.put(new Person("a", 20), "a");        map.put(new Person("b", 20), "a");        map.put(new Person("c", 20), "a");        map.put(new Person("c", 20), "a");        // 两种遍历        for (Person key : map.keySet()) {            String value = map.get(key);            System.out.println(key + "<==>" + value);        }        for (Entry<Person, String> entry : map.entrySet()) {            System.out.println(entry.getKey() + "<==>" + entry.getValue());        }    }}

LinkedHashMap集合:

package demo;import java.util.LinkedHashMap;public class LinkedHashMapDemo {    public static void main(String[] args) {        LinkedHashMap<String, String> link = new LinkedHashMap<String, String>();        link.put("1", "a");        link.put("2", "a");        link.put("3", "a");        link.put("4", "a");        System.out.println(link);        //{1=a, 2=a, 3=a, 4=a}        //存取顺序一致    }}

set接口下还有一个hashtable集合,但是过时了,现在由hashmap取代

不过,要注意一个问题:

HashMap允许存储null值,HashTable不允许存储null值,两种都不允许存储null键

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台