Java基础复习_day14_Map集合&Collections

Map

1. 概述

interface Map<K,V>  K:键的类型;V:值的类型

2. 特点

  • 键值对映射关系
  • 一个键对应一个值
  • 键不能重复,值可以重复
  • 元素存取无序

3. 常用方法

  • V put(K key,V value) 添加元素
  • V remove(Object key) 根据键删除键值对元素
  • void clear() 移除所有的键值对元素
  • boolean containsKey(Object key) 判断集合是否包含指定的键
  • boolean containsValue(Object value) 判断集合是否包含指定的值
  • boolean isEmpty() 判断集合是否为空
  • int size() 集合的长度,也就是集合中键值对的个数
  • V get(Object key) 根据键获取值
  • Set keySet() 获取所有键的集合
  • Collection values() 获取所有值的集合
  • Set<Map.Entry<K,V>> entrySet() 获取所有键值对对象的集合

4. 代码示例

  • 创建map集合对象, 存储夫妻的姓名到集合中, 然后遍历集合, 得到每一对夫妻
public class Test {
    public static void main(String[] args) {
        // 创建map集合
        Map<String, String> fqName = new HashMap<>();
        // 向集合中添加元素
        fqName.put("张无忌", "赵敏");
        fqName.put("郭靖", "黄蓉");
        fqName.put("杨过", "小龙女");

        // 遍历集合(方式一)
        // 1. 获取到key的集合
        Set<String> keys = fqName.keySet();
        // 2. 遍历keys
        for (String key : keys) {
            // 3. 通过key 获取 value
            String value = fqName.get(key);
            System.out.println(key + "<->" + value);
        }
		// 方式二
        // 1. 获取到所有键值对对象的集合
        Set<Map.Entry<String, String>> fqs = fqName.entrySet();
        // 2. 遍历集合
        for (Map.Entry<String, String> fq : fqs) {
            // 3. 通过get方法获取键和值
            String key = fq.getKey();
            String value = fq.getValue();
            System.out.println(key + "<->" + value);
        }
    }
}

运行结果:
在这里插入图片描述

5. 集合的嵌套案例

  • 创建一个ArrayList集合,存储三个元素,每一个元素都是HashMap
  • 每一个HashMap的键和值都是String,并遍历。
public class Test {
    public static void main(String[] args) {
        // 创建ArrayList 集合对象
        ArrayList<Map<String, String>> maps = new ArrayList<>();

        // 创建Map集合对象
        Map<String, String> map1 = new HashMap<>();

        // 向集合中添加元素
        map1.put("孙策", "大乔");
        map1.put("周瑜", "小乔");

        // 把map集合添加到ArrayList集合中
        maps.add(map1);

        // 创建Map集合对象
        Map<String, String> map2 = new HashMap<>();

        // 向集合中添加元素
        map1.put("郭靖", "黄蓉");
        map1.put("杨过", "小龙女");

        // 把map集合添加到ArrayList集合中
        maps.add(map2);

        // 遍历输出ArrayList集合中的元素
        for (Map<String, String> map : maps) {
            // 遍历map集合中的元素
            Set<String> keys = map.keySet();
            for (String key : keys) {
                String value = map.get(key);
                // 输出结果
                System.out.println(key + "-" + value);
            }
        }
    }
}

运行结果:
在这里插入图片描述

6. TreeMap集合练习

  • 键盘录入一个字符串,要求统计字符串中每个字符串出现的次数。
  • 举例:键盘录入“aababcabcdabcde” 在控制台输出:“a(5)b(4)c(3)d(2)e(1)”;
public class Test3 {
    public static void main(String[] args) {
        // 键盘录入字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String line = sc.next();

        // 创建TreeMap集合
        TreeMap<Character, Integer> tMap = new TreeMap<Character, Integer>();

        // 遍历字符串
        for (int i = 0; i < line.length(); i++) {
            if (!tMap.containsKey(line.charAt(i))) {
                tMap.put(line.charAt(i), 1);
            } else {
                Integer index = tMap.get(line.charAt(i));
                tMap.put(line.charAt(i), ++index);
            }
        }

        // 遍历集合对象
        Set<Character> keys = tMap.keySet();
        for (Character key : keys) {
            Integer index = tMap.get(key);
            System.out.print(key + "("+index+")");
        }
    }
}

运行结果:
在这里插入图片描述

Collections

1. 概述

  • 是针对集合操作的工具类;

2. 常用方法

  • public static void sort(List list) 将指定的列表按升序排序
  • public static void reverse(List<?> list) 反转指定列表中元素的顺序
  • public static void shuffle(List<?> list) 使用默认的随机源随机排列指定的列表

3. 案例

  • ArrayList集合存储学生并排序
  • 按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
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;
    }
}
public class CollectionsDemo02 {
    public static void main(String[] args) {
        //创建ArrayList集合对象
        ArrayList<Student> array = new ArrayList<Student>();

        //创建学生对象
        Student s1 = new Student("linqingxia", 30);
        Student s2 = new Student("zhangmanyu", 35);
        Student s3 = new Student("wangzuxian", 33);
        Student s4 = new Student("liuyan", 33);

        //把学生添加到集合
        array.add(s1);
        array.add(s2);
        array.add(s3);
        array.add(s4);

        //使用Collections对ArrayList集合排序
        //sort(List<T> list, Comparator<? super T> c)
        Collections.sort(array, new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                //按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
                int num = s1.getAge() - s2.getAge();
                int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;
                return num2;
            }
        });

        //遍历集合
        for (Student s : array) {
            System.out.println(s.getName() + "," + s.getAge());
        }
    }
}
发布了22 篇原创文章 · 获赞 4 · 访问量 1277

猜你喜欢

转载自blog.csdn.net/weixin_42931689/article/details/104253283
今日推荐