09Java语法回顾map集合

Java语法回顾Map集合


读了那么多年的书让我明白一个道理。人要稳重,不要想到啥就做啥。做一行越久即使你不会,几年之后慢慢的你也会了,加上一点努力你或许你能成为别人眼中的专家。

Map集合的简介

/*
 * Map:最大的优点就是体现对应关系。
 * Map是一个键值对形式的集合。它的数据不再是单个的了,必须同时有键和值组成。
 * 
 * Map和Collection的区别?
 * Map:是(键值对)双列形式的集合;键必须是唯一的,不能重复,值可以重复;看成是夫妻对的集合。
 * Collection:是单列值的集合;Collection的List儿子,是可以重复,它的Set儿子是唯一的;看成是单身汉的集合。
 * 
 * Map接口的功能:
 * A:增加功能
 *      V put(K key,V value):当key在集合中不存在时,添加元素;当key在集合存在时候,替换元素。
 * B:删除功能
 *      void clear():清除所有键值对数据。
 *      V remove(Object key):根据指定的键删除键值对。
 * C:判断功能
 *      boolean containsKey(Object key):判断指定的键是否在集合中存在
 *      boolean containsValue(Object vlaue):判断指定的值是否在集合中存在
 *      boolean isEmpty():判断集合是否为空
 * D:获取功能
 *      Set<Map.Entry<K,V>> entrySet():键值对对象的集合。
 *      Object get(Object key):根据键获取值
 *      Set<K> keySet():所有键的集合
 *      Collection<V> values():所有值的集合
 * E:长度功能
 *       int size()
 * 
 * 注意:Map集合中的具体实现类的数据结构,是针对键有效。
 */

Map集合的遍历

/*
 * Set<K> keySet():所有键的集合
 * Collection<V> values():所有值的集合
 */

Map集合的遍历的代码测试

public class MapDemo2 {
    public static void main(String[] args) {
        // 创建集合对象
        Map<Integer, String> map = new HashMap<Integer, String>();

        // 创建并添加元素
        map.put(1, "貂蝉");
        map.put(2, "黄忠");
        map.put(3, "赵云");

        // 显示数据
        // System.out.println(map);

        // Set<K> keySet():所有键的集合
        Set<Integer> keySet = map.keySet();
        for (Integer key : keySet) {
            System.out.println(key);
        }
        //所有值的集合
        Collection<String> values = map.values();
        for (String value : values) {
            System.out.println(value);
        }
}

Map集合的遍历方式二的代码测试

/*
 * Object get(Object key):根据键获取值
 * Map集合的遍历。
 *      方式1:丈夫找妻子
 *          A:把所有丈夫给集中起来。Set<K> keySet()
 *          B:遍历丈夫集合,获取到每一个丈夫。迭代器,增强for
 *          C:让丈夫去找妻子。get(Object key)
 */
 Code
 public class MapDemo3 {
    public static void main(String[] args) {
        // 创建集合对象
        Map<String, String> map = new HashMap<String, String>();

        // 创建并添加元素
        map.put("杨过", "小龙女");
        map.put("郭靖", "黄蓉");
        map.put("梁山伯", "祝英台");
        map.put("牛郎", "织女");
        // 遍历
        // A:把所有丈夫给集中起来。Set<K> keySet()
        Set<String> husbandSet = map.keySet();
        Iterator<String> iterator = husbandSet.iterator();
        whiel(iterable.hasNext){
        String key = iterable.next;
        String value = map.get(key);
        System.out.println(key+"---"+value);
        }
        // B:遍历丈夫集合,获取到每一个丈夫。迭代器,增强for
        for (String husband : husbandSet) {
            // C:让丈夫去找妻子。get(Object key)
            String wife = map.get(husband);
            System.out.println(husband + "***" + wife);
        }
    }

Map集合的遍历方式(Map.Entry)的代码测试

/*
 * Map集合的遍历。
 * 通过Map.Entry找key和value。
 *      A:获取所有Map.Entry的集合。Set<Map.Entry<K,V>> entrySet()
 *          class Map.Entry<K,V>
 *          {
 *              private K key;
 *              private V value;
 * 
 *              public Map.Entry(K key,V value)
 *              {
 *                  this.key = key;
 *                  this.value = value;
 *              }
 * 
 *              public K getKey()
 *              {
 *                  return key;
 *              }
 * 
 *              public V getValue()
 *              {
 *                  return value;
 *              }
 *          }
 *      B:遍历Map.Entry集合,获取到每一个Map.Entry对象。迭代器,增强for。
 *      C:通过Map.Entry对象获取key和value。
 */
 Code部分

 public class MapDemo4 {
    public static void main(String[] args) {
        // 创建集合对象
        Map<String, String> map = new HashMap<String, String>();

        // 创建并添加元素
        map.put("杨过", "小龙女");
        map.put("郭靖", "黄蓉");
        map.put("梁山伯", "祝英台");
        map.put("牛郎", "织女");

        // Set<Map.Entry<K,V>> entrySet():键值对对象的集合。
        //map.entrySet
        Set<Entry<String,String>> entrySet = map.entrySet();
        for (Entry<String, String> entry : entrySet) {
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+"****"+value);
        }
    }
}

HashMap存储自定义对象并遍历

/*
 * HashMap存储键和值。并遍历。
 * 键:String 学号
 * 值:Student (name,age)
 */
CODE
public class HashMapDemo2 {
    public static void main(String[] args) {
        // 创建集合对象
        HashMap<String, Student> hm = new HashMap<String, Student>();

        // 创建元素对象
        Student s1 = new Student("李世民", 30);
        Student s2 = new Student("朱元璋", 40);
        Student s3 = new Student("武则天", 50);

        // 添加元素
        hm.put("it001", s1);
        hm.put("it002", s2);
        hm.put("it003", s3);

        // 遍历
        Set<String> keySet = hm.keySet();
        for (String key : keySet) {
            Student student = hm.get(key);
            System.out.println(key+"****"+student.getName()+student.getAge());
        }
        // 遍历2
        Set<Map.Entry<String, Student>> hmSet = hm.entrySet();
        for (Map.Entry<String, Student> me : hmSet) {
            String key = me.getKey();
            Student value = me.getValue();
            System.out.println(key + "***" + value.getName() + "***"
                    + value.getAge());
        }
    }
}

TreeMap集合(有序的)

/*
 * TreeMap存储自定义对象并遍历。
 * 键:Student
 * 值:String
 * 
 * 如果一个自定义对象做键,用TreeMap集合。
 * 就必须要实现排序。
 * 两种方式:
 * A:让自定义对象所属的类去实现Comparable接口
 * B:使用带参构造方法,创建TreeMap,接收Comparator接口参数。
 */
 CODE
 public class TreeMapDemo2 {
    public static void main(String[] args) {
        // 创建集合对象
        TreeMap<Student, String> tm = new TreeMap<Student, String>(
                new Comparator<Student>() {
                    @Override
                    public int compare(Student s1, Student s2) {
                        // int num = s1.getAge() - s2.getAge();
                        int num = s2.getAge() - s1.getAge();
                        int num2 = (num == 0) ? s1.getName().compareTo(
                                s2.getName()) : num;
                        return num2;
                    }
                });

        // 创建元素对象
        Student s1 = new Student("李世民", 30);
        Student s2 = new Student("朱元璋", 40);
        Student s3 = new Student("武则天", 50);
        Student s4 = new Student("武则天", 50);
        Student s5 = new Student("武则天", 30);

        // 添加元素
        tm.put(s1, "it001");
        tm.put(s2, "it002");
        tm.put(s3, "it003");
        tm.put(s4, "it004");
        tm.put(s5, "it005");

        // 遍历
        Set<Student> set = tm.keySet();
        for (Student key : set) {
            String value = tm.get(key);
            System.out.println(key.getName() + "***" + key.getAge() + "***"
                    + value);
        }
    }
}

Hashtable和HashMap的区别

/*
 * HashtableHashMap的区别?
 * A:Hashtable线程安全,效率低;不允许null键和值。
 * B:HashMap线程不安全,效率高;允许null键和值。
 */

HashMap集合循环嵌套使用

/*
 * czbk:
 *      yr 预热班
 *      jy 就业班
 * 预热班:
 *      01 zhangsan
 *      02 lisi 
 * 就业班:
 *      01 wangwu
 *      02 zhaoliu
 *
 * Map的嵌套。
 */

HashMap集合循环嵌套使用代码测试

public class HashMapDemo {
    public static void main(String[] args) {
        //最外层HashMap    czbk
        HashMap<String, HashMap<String, String>> czbk = new HashMap<String, HashMap<String, String>>();
        //预热班HashMap    yr
        HashMap<String, String> yr = new HashMap<String,String>();
        yr.put("01", "zhangsan");
        yr.put("02", "lisi");
        //就业班HashMap    jy
        HashMap<String, String> jy = new HashMap<String,String>();
        jy.put("01", "wangwu");
        jy.put("02", "zhaoliu");
        czbk.put("就业班", jy);
        czbk.put("预热班", yr);
        //获取总集合 键的集合
        Set<String> keySet = czbk.keySet();
        for (String key : keySet) {
            System.out.println(key);
            //根据键的集合获取值
            HashMap<String, String> czbkKey = czbk.get(key);
            // 内部还是一个集合。再获取内部集合的键
            Set<String> bjKey = czbkKey.keySet();
            for (String key2 : bjKey) {
                String value = czbkKey.get(key2);
                System.out.println("\t"+key2+" "+value);
            }
        }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值