Map集合 / Collections集合工具

一. Map集合

  1. Interface Map< K , V> : key 代表键,V为键所映射的值,键不能重复而值可以重复(如学号和姓名)。
  2. 底层基于hash表,保证键的唯一性
  3. 如果把Javabean类对象作为值,需要在Javabean类中重写hashcode()和equals()方法,保证键的唯一性
    在这里插入图片描述
    在这里插入图片描述
public class HashMap1 {
    public static void main(String[] args) {
//        HashMap的创建,使用多态的方式
        Map<String, String> map = new HashMap<>();

//       往map集合中添加元素,使用put()方法
        map.put("前前男友", "叶修");
        map.put("前男友", "黄少天");
        map.put("现男友", "周泽楷");

//  输出集合,hashmap重写了tostring()方法
        System.out.println(map); // {前男友=黄少天, 现男友=周泽楷, 前前男友=叶修}

//        根据键获取值
        String s = map.get("现男友"); //周泽楷
        System.out.println(s);

//        map集合的遍历方法,先获取键的集合,然后在通过键获取值,利用增强for
        Set<String> set = map.keySet();
        for (String key1 : set) {
            String value1 = map.get(key1);
            System.out.println(key1);
            System.out.println(value1);
        }
        /*
        遍历结果:
        前男友
            黄少天
        现男友
            周泽楷
        前前男友
             叶修
         */
//        也可以用foreach方式对map集合进行遍历
        map.forEach((key, value) -> {
            System.out.println(key);
            System.out.println(value);
        });
    }
}

  1. ArrayList集合存储hashmap集合对象,并遍历的案例
public class HashMap2 {
    public static void main(String[] args) {
//        创建一个list集合,map集合
        ArrayList<HashMap<String, String>> list = new ArrayList();
        HashMap<String, String> map1 = new HashMap<>();
        map1.put("男神", "五条悟");
        map1.put("同学", "伏黑");
        map1.put("男朋友", "狗卷");
        map1.put("总结", "人生巅峰");

        HashMap<String, String> map2 = new HashMap<>();
        map1.put("同桌", "越前");
        map1.put("哥哥", "不二");
        map1.put("竹马", "降谷晓");
        map1.put("邻居", "柯南");

        HashMap<String, String> map3 = new HashMap<>();
        map1.put("叔叔", "杀生丸");
        map1.put("朋友", "唐三");
        map1.put("兄弟", "叶修");
        map1.put("老婆", "淮竹");

//    使用集合的工具类将map集合对象添加进入list集合中
        Collections.addAll(list, map1,map2,map3);
//        遍历集合
        for (HashMap<String, String> map : list) {
           map.forEach((key,value)->{
                   System.out.println(key+"...."+value);
           }) ;
        }
    }
}

  1. 键盘录入字符串,统计字符出现的次数
    使用TreeMap集合对键进行自然排序
public class HashMap3 {
    public static void main(String[] args) {
//        键盘录入
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入:");
        String line = sc.nextLine();

//        创建一个map集合,用来统计字符和出现的次数
        TreeMap<Character,Integer> map=new TreeMap<>();
//        遍历字符串,查出每一个字符
        for (int i = 0; i < line.length(); i++) {
            char c = line.charAt(i);
//            判断字符在集合中是否出现过
            Integer integer = map.get(c);
//     拿键找值,如果键不存在,返回值为null
            if (integer==null){
                map.put(c,1);
            }else{
                integer++;
                map.put(c, integer);
            }
        }
//        创建Stringbuilder对象, 用来封装数据
        StringBuilder sb=new StringBuilder();
        map.forEach((key,value)->{
            sb.append(key).append("(").append(value).append(")");
        });
        System.out.println(sb.toString());
    }
}

二. Collections的使用

  1. 概述:针对集合操作的工具类
  2. 常用方法
    -
/*
Collections的基本操作
 */
public class HashMap4 {
    public static void main(String[] args) {
//        创建简单的集合,对集合进行排序
        ArrayList<Integer> list=new ArrayList<>();
        Collections.addAll(list, 30,13,32,532);
//        对集合进行排序
        Collections.sort(list);
        System.out.println(list);  //[13, 30, 32, 532]
//        打乱集合中元素的顺序
        Collections.shuffle(list);
        System.out.println(list);  //[30, 532, 32, 13]
//        反转集合中的数据
        Collections.reverse(list);
        System.out.println(list);  // [13, 32, 532, 30]
    }
}

  1. 案例:ArrayList存储学生对象按年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
/*
Collections的基本操作
 */
public class HashMap5 {
    public static void main(String[] args) {
//  创建集合
        ArrayList<Student> list = new ArrayList<>();
        Student s1 = new Student("ahkk", 25);
        Student s2 = new Student("dfdsf", 25);
        Student s3 = new Student("drv", 18);
        Collections.addAll(list, s1, s2, s3);

//        使用匿名内部类的方式创建一个比较器
        Collections.sort(list, new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                int num = s1.getAge() - s2.getAge();
                int num1 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;
                return num1;
            }
        });
//        查看集合
        System.out.println(list);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值