【java核心技术】集合(下)常见知识点总结

集合

在这里插入图片描述
注:黄色为接口,白色为实现类

集合(上)常见知识点总结中已经介绍了Collection中的各种集合,现在开始介绍Map接口下的集合

一、Map接口

Map(映射)不能包含重复的键,每个键最多映射一个值
interface Map<K,V>   K:键的类型   V:值的类型

(1)基本方法

方法说明
V put(K key, V value)将键与值相关联(若不存在创建,若键存在覆盖掉值)
V get(Object key)根据键获取对应的值
V remove(Object key)根据键删除键值对
void clear()删除所有键值对
boolean containsKey(Object key)判断是否包含指定键
boolean containsValue(Object value)判断是否包含指定值
boolean isEmpty()判断是否为空
int size()键值对数量
Set< K> keySet()获取所有键的集合
Collection< V> values()获取所有值的集合
Set<Map.Entry<K,V>> entrySet()获取所有键值对对象的集合

(2)遍历集合

/**
 * 集合的遍历
 */
public class MapTest {
    public static void main(String[] args) {
        HashMap<String, String> map = new HashMap<>();
        map.put("A","a");
        map.put("B", "b");
        map.put("C", "c");
        /**
         * 方法一:键找值
         */
        // 获取key集合
        Set<String> keySet = map.keySet();
        for (String key : keySet) {
            // 获取value值
            String value = map.get(key);
            System.out.println(key+","+value);
        }

        /**
         * 方法二:键值对对象找键和值
         */
        // 获取所有键值对
        Set<Map.Entry<String, String>> entrySet = map.entrySet();
        for (Map.Entry<String, String> entry : entrySet) {
            // 获取key和value
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+","+value);

        }
        
        /**
         * 方法三:使用foreach方法
         */
        map.forEach((k,v)->{
            System.out.println(k+","+v);
        });

    }
}

二、HashMap集合

Person为key,String为value
为保证key唯一性,需要重写Person类中的equals和hashCode方法

代码示例:

public class HashMapTset {
    public static void main(String[] args) {
        Person p1 = new Person("小明", 5);
        Person p2 = new Person("小红", 6);
        Person p3 = new Person("小爱", 10);
        // 定义与p3相同的p4
        Person p4 = new Person("小爱", 10);
        
        // 定义HashMap集合
        HashMap<Person, String> person = new HashMap<>();
        // 添加键值对
        person.put(p1, "上海");
        person.put(p2, "北京");
        person.put(p3, "广州");
        // 会将小爱更新为青岛
        person.put(p4, "青岛");
        
        // 遍历集合
        Set<Person> keySet = person.keySet();
        for (Person key : keySet) {
            String value = person.get(key);
            System.out.println(key.getName()+","+key.getAge()+","+value);
        }
    }
}

三、ArrayList集合嵌套HashMap集合

代码示例:

public class Test1 {
    public static void main(String[] args) {
        // 创建ArrayList集合
        ArrayList<HashMap<String, String>> list = new ArrayList<>();
        // 创建HashMap集合
        HashMap<String, String> map1 = new HashMap<>();
        map1.put("星星", "月亮");
        map1.put("天空", "海洋");
        HashMap<String, String> map2 = new HashMap<>();
        map2.put("弟弟", "哥哥");
        map2.put("父亲", "母亲");
        HashMap<String, String> map3 = new HashMap<>();
        map3.put("牛郎", "织女");
        map3.put("周瑜", "小乔");
        // 添加进ArrayList集合
        list.add(map1);
        list.add(map2);
        list.add(map3);

        // 遍历ArrayList集合
        for (HashMap<String, String> map : list) {
            // 遍历HashMap集合
            Set<String> keys = map.keySet();
            for (String key : keys) {
                String value = map.get(key);
                System.out.println(key + "," + value);
            }

        }
    }
}

四、HashMap集合嵌套ArrayList集合

代码示例:

public class Test2 {
    public static void main(String[] args) {
        // 创建HashMap集合
        HashMap<String, ArrayList<String>> map = new HashMap<>();
        // 创建ArrayList集合
        ArrayList<String> list1 = new ArrayList<>();
        list1.add("汤姆");
        list1.add("杰瑞");
        ArrayList<String> list2 = new ArrayList<>();
        list2.add("熊大");
        list2.add("熊二");
        ArrayList<String> list3 = new ArrayList<>();
        list3.add("红果果");
        list3.add("绿泡泡");
        // 添加集合
        map.put("猫和老鼠", list1);
        map.put("熊出没", list2);
        map.put("智慧树", list3);

        // 遍历HashMap集合
        Set<String> keys = map.keySet();
        for (String key : keys) {
            System.out.println(key+":");
            ArrayList<String> values = map.get(key);
            // 遍历ArrayList集合
            for (String value : values) {
                System.out.println(value);
            }
        }
    }
}

五、统计字符个数并排序

代码示例:

/**
 * 统计字符个数
 */
public class Test3 {
    public static <map> void main(String[] args) {
        System.out.println("请输入字符串");
        Scanner sc = new Scanner(System.in);
        String line = sc.next();
        // 创建HashMap集合
        HashMap<Character, Integer> map = new HashMap<>();
        // 字符统计
        for (int i = 0; i < line.length(); i++) {
            char key = line.charAt(i);
            Integer value = map.get(key);
            // 创建键值对
            if (value == null) {
                map.put(key, 1);
            } else {
                value++;
                map.put(key, value);
            }
        }

        // 排序
        // 创建ArrayList集合
        ArrayList<Map.Entry<Character, Integer>> lists = new ArrayList<>(map.entrySet());
        lists.sort(new Comparator<Map.Entry<Character, Integer>>() {
            @Override
            public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
                // 从大到小
                return o2.getValue() - o1.getValue();
            }
        });

        // 遍历集合
        for (Map.Entry<Character, Integer> list : lists) {
            System.out.println(list.getKey() + "," + list.getValue());
        }
    }
}
  • 构造方法:ArrayList(Collection<? extends E> c) 构造一个包含指定集合的元素的列表
  • 更新索引项的简化操作
// 将把key与1关联,否则使用Integer::sum函数组合原值和1(也就是将原值与1求和)
map.merge(key, 1,Integer::sum);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值