集合框架(04)HashMap

集合Map的简单方法:该集合存储键值对,一对一对往里面存,而且要保证健的唯一性

1.添加

         put(K key,V value)

          putAll(Map<? Extends k, ? extends v> m)

2.删除

  clear()

3.判断

  containsValue(Object value)

  containsKey(Object key)

  isEmpty()

4.获取

   get(Object key)

   size()

   values()

   entrySet()

   keySet()

 方法代码示例:

package CollectionTest;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class HashMapDemo1 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Map<String,String> map = new HashMap<String,String>();
        //在添加元素时,如果添加的相同的键,则后添加的键对应的值会覆盖前面的值
        map.put("001", "zhangsan");
        map.put("002", "lisi");
        map.put("003", "wangwu");
        
        System.out.println("containsKsy:"+map.containsKey("002"));
        //remove移除键的同时,返回的是此键对应的值
        //System.out.println("remove:"+map.remove("002"));
        
        //在HashMap中null可以当做键存起来
        map.put(null, "haha");
        System.out.println(map.get(null));
        
        //通过values方法得到HashMap的所有值,此时返回的是集合
        Collection<String> coll = map.values();
        System.out.println("values:"+coll);
        

    }

}

 Map(三种类型以及他们的区别):

  •      ----HashTable:底层是哈表表数据结构,键和值不可以出现null,该集合石线程同步的
  •      ----HashMap:底层是哈希白表数据结构,允许使用null值和null键,该集合石不同步的
  •      ----TreeMap:底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序

Map集合的两种取出方式:

  1. Set<k> keySet:将map中所有的键存入到set集合,因为set具备迭代器,所有可以迭代方式出去所有的键,在根据get方法,获取每一个键对应的值

         2.Set<Map.Entry<k,v>>  entrySet:将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是Map.Entry

             Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口

             Map.Entry内部代码示例:

  

interface Map{
    public static interface Entry{
        public abstract Object getKey();
        public abstract Object getValue();
    }
}

       

Map集合的取出原理:

将map集合转化成set集合,之后调用迭代器取出

 Map集合第一种出去方式代码示例:

package CollectionTest;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class HashMapDemo2 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Map<String,String> map = new HashMap<String,String>();
        map.put("001", "zhangsan");
        map.put("002", "lisi");
        map.put("003", "wangwu");
        //先获取map集合的所有键的Set集合,keySet
        Set<String> keyset = map.keySet();
         //有了set集合就可以获得其迭代器
        Iterator<String> it = keyset.iterator();
        while(it.hasNext()){
            String key = it.next();
            String value = map.get(key);
            System.out.println("Key_"+key+":"+value);
        }
        
        

    }

}

  Map集合第二种出去方式代码示例:

package CollectionTest;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;


public class HashMapDemo2 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Map<String,String> map = new HashMap<String,String>();
        map.put("001", "zhangsan");
        map.put("002", "lisi");
        map.put("003", "wangwu");
        Set<Map.Entry<String, String>> entry = map.entrySet();
        Iterator<Map.Entry<String, String>> it = entry.iterator();
        while(it.hasNext()){
            Map.Entry<String, String> me = it.next();
            String key = me.getKey();
            String value = me.getValue();
            System.out.println(key+":"+value);
        }
    }

}

 Map中除去重复的键需要重写HashCode和equals方法

每一个学生都有对应的归属地

学生Student, 地址String

学生属性:姓名,年龄

注意:姓名和年龄相同的是为同一个学生

保证学生的唯一性 

描述学生

定义map容器,将学生作为键,地址最为值,存入,获取map集合中的元素

重写equals和HashCode可以:右击鼠标->source->重写HashCode和equals:代码示例:

package CollectionTest;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

class Student{
    private String name;
    @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;
        Student other = (Student) 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;
    }
    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;
    }
    private int age;
    Student(String name,int age){
        this.name=name;
        this.age=age;
    }
    
    //重写了toString方法 可以直接返回name和age
    public String toString(){
        return name+":"+age;
    }
}

public class HashMapDemo3 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        Map<Student,String> map = new HashMap<Student,String>();
        map.put(new Student("zhangsan",10), "nanjing");
        map.put(new Student("zhangsan",10), "shanghai");
        map.put(new Student("lisi",20), "shanghai");
        map.put(new Student("wangwu",30), "guangzhou");
        
        Set<Student> keyset = map.keySet();
        
        Iterator<Student> it = keyset.iterator();
        while(it.hasNext()){
            Student stu = it.next();
            String add = map.get(stu);
            System.out.println(stu+","+add);
        }
        System.out.println("..........................");
        Set<Map.Entry<Student, String>> set = map.entrySet();
        
        Iterator<Map.Entry<Student, String>> it2 = set.iterator();
        while(it2.hasNext()){
            Map.Entry<Student, String> me = it2.next();
            Student stu2 = me.getKey();
            String add2 = me.getValue();
            System.out.println(stu2+","+add2);
        }
        

    }

}
原文地址:https://www.cnblogs.com/sunxiaoyan/p/8682135.html