Map、TreeMap、HashMap

package cn.maplearn.demo;

public class Employee implements Comparable<Employee>{
    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;
    }
    /**
     * @param name
     * @param age
     */
    public Employee(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    /**
     * 
     */
    public Employee() {
        super();
    }
    @Override
    public String toString() {
        return "Employee [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;
        Employee other = (Employee) 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;
    }
    /* (non-Javadoc)
     * @see java.lang.Comparable#compareTo(java.lang.Object)
     */
    @Override
    public int compareTo(Employee o) {
        int temp=this.age-o.age;
        return temp==0? this.name.compareTo(o.name):temp;
    }

}
package cn.maplearn.demo;

import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class EntryDemo {
    /*
    练习:学生对象(姓名,年龄)都有对应的归属地

    key=Student value=String 
    */
    public static void main(String[] args) {
//      将学生和归属存储到HashMap集合中并取出,同姓名同年龄视为同一个学生
//      Map<Employee, String> map=new HashMap<Employee, String> ();
//      自定义比较器
        Comparator<Employee> comparator=new Comparator<Employee>() {

            @Override
            public int compare(Employee o1, Employee o2) {
                int temp=o1.getName().compareTo(o2.getName());              
                return temp==0?o1.getAge()-o2.getAge():temp;
            }

        };
//      Map<Employee, String> map=new TreeMap<Employee, String> (comparator);//不传比较器就是按年龄排序
        Map<Employee, String> map=new LinkedHashMap<Employee, String> ();//如果改成LinkedHashMap可以实现有序
        map.put(new Employee("张三  ",25), "中国");
        map.put(new Employee("王五 ",5457), "北京");
        map.put(new Employee("李四  ",13), "乌克兰");//键不能保证唯一性了,需要修改hasCode()和equals()
        map.put(new Employee("李四  ",13), "上海");
        map.put(new Employee("赵六",13), "上海");

        Set<Map.Entry<Employee, String>> entrySet=map.entrySet(); 
        for (Map.Entry<Employee, String> employee : entrySet) {
            Employee keEmployee=employee.getKey();
            String value=employee.getValue();
            System.out.println(keEmployee.getName()+":"+keEmployee.getAge()+"....."+value);
        }

    }
}
package cn.maplearn.demo;

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

public class MapDemo {
    /*
    Map:双列集合,一次存一对,键值对。要保证键的唯一性
    共性的功能:
        1、添加

        v put(key,value);
        putAll(Map<k,v> map);

        2、删除

        void clear();
        v remove(key);

        3、判断

        boolean containsKey(object);
        boolean containsValue(object);
        boolean isEmpty();

        4、获取

        v get(key);
        int size();

        Map
            |--Hashtable:哈希表,是同步的。不允许null键,null值
            |--HashMap:哈希表,是不同步的,不允许null键,null值
            |--TreeMap:二叉树,不同步的。可以对map集合中的键进行排序

        */
    public static void main(String[] args) {
        Map <Integer,String> map=new HashMap<Integer,String>();
        methodDemo(map);
//      需求:map 集合中存储学号和姓名
    }

    public static void methodDemo(Map<Integer,String> map) {
//      存储键值对。如果键相同,会出现值覆盖
        System.out.println(map.put(1, "张三"));
        System.out.println(map.put(1, "二虎"));
        map.put(3, "张三");
        map.put(4, "李四");
        System.out.println(map);
        System.out.println(map.remove(1));
        System.out.println(map);
    }
}

entrySet

package cn.maplearn.demo;

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

import javax.swing.plaf.metal.MetalSplitPaneUI;

public class MapDemo2 {
    /*
     * 取出map 中所有元素 map 存储姓名-----归属地
     */
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("df", "张三");
        map.put("as", "李四");
        map.put("gas", "李四");
        System.out.println(map.get("df"));

        // keySet,取出所有的键,并存储到set集合中.map集合没有迭代器,但是可以将map集合转成set集合,再使用迭代器就解决了
        Set<String> keySet = map.keySet();
        for (Iterator<String> iterator = keySet.iterator(); iterator.hasNext();) {
            String key = iterator.next();
            String value=map.get(key);
            System.out.println(key+":"+value);
        }
/*      
//      演示entrySet  Map.Entry其实就是一个Map接口中内部接口
        Set<Map.Entry<String,String>> entrySet=map.entrySet();
        for (Iterator<Map.Entry<String,String>> iterator = entrySet.iterator(); iterator.hasNext();) {
            Map.Entry<String, String> entry = iterator.next();
            String key=entry.getKey();
            String value=entry.getValue();
            System.out.println(key+":"+value);          
        }
*/      
//      演示values()所有的值
        Collection<String> values=map.values();
        for (Iterator<String> iterator = values.iterator(); iterator.hasNext();) {
            String value = iterator.next();
            System.out.println(value);

        }
    }
}

interface MyMap{
//  entry就是,map接口中的内部接口
    public static interface MyEntry{

    }
}

class MyDemo implements MyMap.MyEntry{

}
package cn.maplearn.demo;

public class NoWeekException extends RuntimeException {

    /**
     * 
     */
    public NoWeekException() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @param arg0
     * @param arg1
     * @param arg2
     * @param arg3
     */
    public NoWeekException(String arg0, Throwable arg1, boolean arg2, boolean arg3) {
        super(arg0, arg1, arg2, arg3);
        // TODO Auto-generated constructor stub
    }

    /**
     * @param arg0
     * @param arg1
     */
    public NoWeekException(String arg0, Throwable arg1) {
        super(arg0, arg1);
        // TODO Auto-generated constructor stub
    }

    /**
     * @param arg0
     */
    public NoWeekException(String arg0) {
        super(arg0);
        // TODO Auto-generated constructor stub
    }

    /**
     * @param arg0
     */
    public NoWeekException(Throwable arg0) {
        super(arg0);
        // TODO Auto-generated constructor stub
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值