Java API —— HashMap类 & LinkedHashMap类

1、HashMap类
  1)HashMap类概述
        键是哈希表结构,可以保证键的唯一性
  2)HashMap案例
        HashMap<String,String>
        HashMap<Integer,String>
        HashMap<String,Student>
        HashMap<Student,String>
例子1:
package hashmapdemos;
import java.util.HashMap;
import java.util.Set;
/**
 * Created by gao on 15-12-21.
 */
/*
 * HashMap:是基于哈希表的Map接口实现。
 * 哈希表的作用是用来保证键的唯一性的。
 *
 * HashMap<String,String>
 * 键:String
 * 值:String
 */
public class HashMapDemo01 {
    public static void main(String[] args) {
        // 创建集合对象
        HashMap<String, String> hm = new HashMap<String, String>();
        // 创建元素并添加元素
        hm.put("it001", "马云");
        hm.put("it003", "马化腾");
        hm.put("it004", "乔布斯");
        hm.put("it005", "张朝阳");
        hm.put("it002", "裘伯君"); // wps
        hm.put("it001", "比尔盖茨");
        // 遍历
        Set<String> set = hm.keySet();
        for (String key : set) {
            String value = hm.get(key);
            System.out.println(key + "---" + value);
        }
    }
}

例子2:

package hashmapdemos;
import java.util.HashMap;
import java.util.Set;
/**
 * Created by gao on 15-12-21.
 */
/*
 * HashMap<Integer,String>
 * 键:Integer
 * 值:String
 */
public class HashMapDemo02 {
    public static void main(String[] args) {
        // 创建集合对象
        HashMap<Integer, String> hm = new HashMap<Integer, String>();
        // 创建元素并添加元素
        hm.put(27, "林青霞");
        hm.put(30, "风清扬");
        hm.put(28, "刘意");
        hm.put(29, "林青霞");
        // 下面的写法是八进制,因为以0开头,不能出现8以上的单个数据
        // hm.put(003, "hello");
        // hm.put(006, "hello");
        // hm.put(007, "hello");
        // hm.put(008, "hello");
        // 遍历
        Set<Integer> set = hm.keySet();
        for (Integer key : set) {
            String value = hm.get(key);
            System.out.println(key + "---" + value);
        }
    }
}
例子3:
学生类:
package hashmapdemos;
/**
 * Created by gao on 15-12-21.
 */
public class Student {
    private String name;
    private int age;
    public Student() {
    }
    public Student(String name, int age) {
        this.name = name;
        this.age = 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;
    }
}

 测试类:

package hashmapdemos;
import java.util.HashMap;
import java.util.Set;
/**
 * Created by gao on 15-12-21.
 */
/*
 * HashMap<String,Student>
 * 键:String    学号
 * 值:Student 学生对象
 */
public class HashMapDemo03 {
    public static void main(String[] args) {
        // 创建集合对象
        HashMap<String, Student> hm = new HashMap<String, Student>();
        // 创建学生对象
        Student s1 = new Student("周星驰", 58);
        Student s2 = new Student("刘德华", 55);
        Student s3 = new Student("梁朝伟", 54);
        Student s4 = new Student("刘嘉玲", 50);
        // 添加元素
        hm.put("9527", s1);
        hm.put("9522", s2);
        hm.put("9524", s3);
        hm.put("9529", s4);
        // 遍历
        Set<String> set = hm.keySet();
        for (String key : set) {
            Student value = hm.get(key);
            System.out.println(key + "--" + value.getName() + "---" + value.getAge());
        }
    }
}
输出结果:
9524--梁朝伟---54
9522--刘德华---55
9527--周星驰---58
9529--刘嘉玲---50
例子4:
学生类:重写hashCode方法和equals方法
package hashmapdemos;
/**
 * Created by gao on 15-12-21.
 */
public class Student {
    private String name;
    private int age;
    public Student() {
    }
    public Student(String name, int age) {
        this.name = name;
        this.age = 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;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Student)) return false;
        Student student = (Student) o;
        if (age != student.age) return false;
        if (!name.equals(student.name)) return false;
        return true;
    }
    @Override
    public int hashCode() {
        int result = name.hashCode();
        result = 31 * result + age;
        return result;
    }
}

 测试类:

package hashmapdemos;
import java.util.HashMap;
import java.util.Set;
/**
 * Created by gao on 15-12-21.
 */
/*
 * HashMap<Student,String>
 * 键:Student
 *         要求:如果两个对象的成员变量值都相同,则为同一个对象。
 * 值:String
 */
public class HashMapDemo04 {
    public static void main(String[] args) {
// 创建集合对象
        HashMap<Student, String> hm = new HashMap<Student, String>();
        // 创建学生对象
        Student s1 = new Student("貂蝉", 27);
        Student s2 = new Student("王昭君", 30);
        Student s3 = new Student("西施", 33);
        Student s4 = new Student("杨玉环", 35);
        Student s5 = new Student("貂蝉", 27);
        // 添加元素
        hm.put(s1, "8888");
        hm.put(s2, "6666");
        hm.put(s3, "5555");
        hm.put(s4, "7777");
        hm.put(s5, "9999");
        // 遍历
        Set<Student> set = hm.keySet();
        for (Student key : set) {
            String value = hm.get(key);
            System.out.println(key.getName() + "---" + key.getAge() + "---" + value);
        }
    }
}
输出结果:
貂蝉---27---9999
西施---33---5555
杨玉环---35---7777
王昭君---30---6666
 
 
2、LinkedHashMap类
    Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。
package linkedhashmapdemos;
import java.util.LinkedHashMap;
import java.util.Set;
/**
 * Created by gao on 15-12-22.
 */
/*
 * LinkedHashMap:是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。
 * 由哈希表保证键的唯一性
 * 由链表保证键盘的有序(存储和取出的顺序一致)
 */
public class LinkedHashMapDemo {
    public static void main(String[] args) {
        // 创建集合对象
        LinkedHashMap<String, String> lm = new LinkedHashMap<String, String>();
        // 创建并添加元素
        lm.put("2345", "hello");
        lm.put("1234", "world");
        lm.put("3456", "java");
        lm.put("1234", "javaee");
        lm.put("3456", "android");
        // 遍历
        Set<String> set = lm.keySet();
        for (String key : set) {
            String value = lm.get(key);
            System.out.println(key + "---" + value);
        }
    }
}
输出结果(唯一和有序):
2345---hello
1234---javaee   (注意这里的javaee把旧的值world覆盖)
3456---android (注意这里的andorid把旧的值java覆盖)
 
原文地址:https://www.cnblogs.com/yangyquin/p/5066134.html