Java笔记

来源:互联网 发布:冰川网络股票代码 编辑:程序博客网 时间:2024/06/01 08:55

Map集合使用键值对来存储数据,将键映射到值对象,一个映射不能包含重复的键,每一个键最多只能映射到一个值。Map也被称为双列集合,对应的Collection集合是单列集合。

  • Map集合的常用方法:

Map< K, V>
1. 添加
V put(K key,V value):返回前一个和key关联的值,如果没有返回null。如果此映射以前包含一个该键的映射关系,则用指定值替换旧值
2. 删除
void clear():清空Map集合
V remove(Object key):根据指定的key移除这个键值对,如果不存在key,返回null。
3. 判断
boolean containsKey(Object key):是否包含key
boolean containsValue(Object value):是否包含value
boolean isEmpty():Map集合是否为空,为空则返回true。
4. 获取
V get(Object key):返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
int size():获取键值对的个数
Collection< V> values():返回此映射中包含的值的 Collection 视图。就是说返回一个包含Map集合中的值的Collection集合。

    public static void main(String[] args){        Map<Integer, String> map = new HashMap<Integer, String>();        map.put(5,"zhangsan");        map.put(3,"wangwu");        map.put(2,"zhangsan");        map.put(6,"zhaoliu");        Collection<String> values = map.values();        Iterator<String> it2 = values.iterator();        while(it2.hasNext()){            System.out.println(it2.next());        }}

输出结果:
zhangsan
wangwu
zhangsan
zhaoliu

  • Map集合取出元素的方法:

1. keySet
Collection集合中有迭代器,可以使用迭代器来取出Collection集合中的元素,但是Map集合中没有迭代器。通过keySet方法获取Map集合中所有的键所在的Set集合,再通过Set的迭代器获取到每一个键对应的值。

public static void main(String[] args){    Map<Integer, String> map = new HashMap<Integer, String>();    keySet(map);}public static void keySet(Map<Integer, String> map){    map.put(5,"zhangsan");    map.put(3,"wangwu");    map.put(2,"zhangsan");    map.put(6,"zhaoliu");    Set<Integer> ks = map.keySet();    Iterator<Integer> it = ks.iterator();    while(it.hasNext()){        Integer key = it.next();        String value = map.get(key);        System.out.println(key+"...."+value);    }}

输出结果:
2….zhangsan
3….wangwu
5….zhangsan
6….zhaoliu

2. entrySet
通过Map集合中的方法Set< Map.Entry< K,V>> entrySet()返回此映射中包含的映射关系的 Set 视图。该方法将Map集合中键与值的映射关系作为对象存储到Set集合中,Set集合中元素的类型就是Map.Entry类型的。
Map.Entry< K,V>是一个接口,表示映射项(键-值对)。接口中包含两个方法getKey()和getValue()分别返回对应的键和值。

public static void main(String[] args){    Map<Integer, String> map = new HashMap<Integer, String>();    entrySet(map);}public static void entrySet(Map<Integer, String> map){    map.put(5,"zhangsan");    map.put(3,"wangwu");    map.put(2,"zhangsan");    map.put(6,"zhaoliu");    Set<Map.Entry<Integer, String>> entrySet =map.entrySet();    Iterator<Map.Entry<Integer, String>> it = entrySet.iterator();    while (it.hasNext()) {        Map.Entry<Integer, String> en = it.next();        Integer key = en.getKey();        String value = en.getValue();        System.out.println(key+".........."+value);    }}

输出结果:
2……….zhangsan
3……….wangwu
5……….zhangsan
6……….zhaoliu

  • Map集合常用子类

1. HashTable
HashTable的内部结构是哈希表,是同步的。HashTable不允许null作为键,也不允许null作为值。
HashTable在JDK1.0就已经出现了,当时还没有集合框架,没有Map集合。所以在当时单列集合就是Vector,双列集合就是HashTabel。
HashTable有一个十分重要的子类就是Properties类。它用来存储键值对型的配置文件信息。

2. HashMap

关于HashMap详解参见:http://alex09.iteye.com/blog/539545
下面直接举例说明:

public static void main(String[] args){    HashMap<Student,String> hm = new HashMap<Student,String>();    hm.put(new Student("lisi",23),"北京");    hm.put(new Student("zhaoliu",24),"上海");    hm.put(new Student("xiaoqiang",31),"沈阳");    hm.put(new Student("wangcai",28),"大连");    hm.put(new Student("zhaoliu",24),"铁岭");    Set<Map.Entry<Student,String>> entrySet = hm.entrySet();    Iterator<Map.Entry<Student,String>> it = entrySet.iterator();    while(it.hasNext()){        Map.Entry<Student,String> en = it.next();        Student key = en.getKey();        String value = en.getValue();        System.out.println(key.getName()+":"+key.getAge()+"---"+value);    }}public class Person {    private String name;    private int age;    //此处省略构造函数,get、set方法,hashCode方法,equals方法,toString方法}public class Student extends Person{    public Student() {        super();        }    public Student(String name, int age) {        super(name, age);       }    public String toString() {        return "Student:"+getName()+":"+getAge();    }}

输出结果:
wangcai:28—大连
lisi:38—北京
zhaoliu:24—铁岭
xiaoqiang:31—沈阳
zhaoliu:24—上海

3. TreeMap
原理参见:http://blog.csdn.net/chenssy/article/details/26668941
举例说明:

public static void main(String[] args) {    TreeMap<Student,String> tm = new TreeMap<Student,String>(new ComparatorByName());    tm.put(new Student("lisi",38),"北京");    tm.put(new Student("zhaoliu",24),"上海");    tm.put(new Student("xiaoqiang",31),"沈阳");    tm.put(new Student("wangcai",28),"大连");    tm.put(new Student("zhaoliu",24),"铁岭");    Iterator<Map.Entry<Student, String>> it = tm.entrySet().iterator();    while(it.hasNext()){        Map.Entry<Student,String> me = it.next();        Student key = me.getKey();        String value = me.getValue();        System.out.println(key.getName()+":"+key.getAge()+"---"+value);    }   }

输出结果:
lisi:38—北京
wangcai:28—大连
xiaoqiang:31—沈阳
zhaoliu:24—铁岭

4. LinkedHashMap
LinkedHashMap由哈希表和链接列表实现,是有序的。

原创粉丝点击