当前位置: 首页 > news >正文

Java基础关键_020_集合(四)

目  录

一、Set 集合

二、Map 集合 

1.概览

2.说明 

3.HashMap 说明

4.LinkedHashMap 说明

5.TreeMap 说明 

6.Hashtable 说明

7.Properties 说明

三、Map 接口常用方法

 1.put(K key, V value) 和 putAll(Map m)

2.get(Object key)

3.clear() 和 size()

4.containsKey(Object key) 和 containsValue(Object value)

5.isEmpty()

6.remove(Object key)

7.values()

8.of(K k1, V v1, K k2, V v2)

9.遍历

(1)keySet()

(2)entrySet()


一、Set 集合

  1. HashSet:无序集合,底层采用了哈希表的数据结构;
  2. LinkedHashSet:有序集合,底层采用双链表和哈希表结合的数据结构;
  3. TreeSet:有序集合,集合中元素可排序,底层采用红黑树的数据结构。

二、Map 集合 

1.概览


2.说明 

  1. Map 接口与 Collection 接口无继承关系;
  2. Map 集合以键值对形式存储;
  3. 键值对的 key 和 value 都是引用数据类型。 key 为主导,value 为附属;
  4. SequencedMap 是 jdk 21 新增的;
  5. key 不可重复,否则 value 会被覆盖;
  6. HashSet 底层 new 了一个 HashMap,向 HashSet 中存储元素实际上是将元素存储到了 HashMap 的 key 部分;
  7. TreeSet 底层 new 了一个 TreeMap,向 TreeSet 中存储元素实际上是将元素存储到了 TreeMap 的 key 部分。排序可通过 java.lang.Comparable 或 java.util.Comparator 实现;
  8. LinkedHashSet 底层 new 了一个 LinkedHashMap,LinkedHashMap 只是为了保证插入元素的顺序,效率比 HashSet 低;
  9. 向 Set 集合中 add 时,底层会向 Map 中 put,value 只是一个固定不变的常量,作为占位符使用。

3.HashMap 说明

  1. 底层是哈希表/散列表的数据结构;

  2. key 部分是无序不可重复的(插入顺序和读取顺序不一致,且具有唯一性)。


4.LinkedHashMap 说明

  1. 底层是双向链表和哈希表结合的数据结构;

  2. key 部分是有序不可重复的(有下标且具有唯一性)。


5.TreeMap 说明 

  1. 底层是红黑树的数据结构;
  2. key 部分是有序不可重复的(可排序且具有唯一性)。

6.Hashtable 说明

  1. 底层是哈希表的数据结构;

  2. 其中所有方法都是线程安全的,但是效率较低,所以较少使用;

  3. key 部分是无序不可重复的(插入顺序和读取顺序不一致,且具有唯一性)。


7.Properties 说明

  1. 是属性类;

  2.  key 和 value 都是 String 类型;

  3. key 部分是无序不可重复的(插入顺序和读取顺序不一致,且具有唯一性)。


三、Map 接口常用方法

 1.put(K key, V value) 和 putAll(Map<? extends K, ? extends V> m)

        添加键值对 和 添加多个键值对。

public class MapTest {
    public static void main(String[] args) {
        HashMap<Integer, String> hashMap = new HashMap<>();
        hashMap.put(1, "茅台");
        hashMap.put(2, "五粮液");
        hashMap.put(3, "剑南春");
        hashMap.put(4, "古井贡酒");
        hashMap.put(5, "汾酒");
        System.out.println(hashMap);    // {1=茅台, 2=五粮液, 3=剑南春, 4=古井贡酒, 5=汾酒}

        HashMap<Integer, String> hashMap1 = new HashMap<>();
        hashMap1.putAll(hashMap);
        hashMap1.put(6, "二锅头");
        hashMap1.put(1, "五花红牛");    // key重复,value覆盖
        System.out.println(hashMap1);   // {1=五花红牛, 2=五粮液, 3=剑南春, 4=古井贡酒, 5=汾酒, 6=二锅头}
    }
}

2.get(Object key)

        通过 key 获取对应的 value 。

public class MapTest {
    public static void main(String[] args) {
        HashMap<Integer, String> hashMap = new HashMap<>();
        hashMap.put(1, "茅台");
        hashMap.put(2, "五粮液");
        hashMap.put(3, "剑南春");
        hashMap.put(4, "古井贡酒");
        hashMap.put(5, "汾酒");
        System.out.println(hashMap.get(5)); // 汾酒
        System.out.println(hashMap.get(6)); // null
    }
}

3.clear() 和 size()

        清空 Map 集合 和 统计键值对的个数。

public class MapTest {
    public static void main(String[] args) {
        HashMap<Integer, String> hashMap = new HashMap<>();
        hashMap.put(1, "茅台");
        hashMap.put(2, "五粮液");
        hashMap.put(3, "剑南春");
        hashMap.put(4, "古井贡酒");
        hashMap.put(5, "汾酒");
        System.out.println(hashMap.size()); // 5
        hashMap.clear();
        System.out.println(hashMap.size()); // 0
    }
}

4.containsKey(Object key) 和 containsValue(Object value)

        是否包含某个 key 或 是否包含某个 value。

public class MapTest {
    public static void main(String[] args) {
        HashMap<Integer, String> hashMap = new HashMap<>();
        hashMap.put(1, "茅台");
        hashMap.put(2, "五粮液");
        hashMap.put(3, "剑南春");
        hashMap.put(4, "古井贡酒");
        hashMap.put(5, "汾酒");
        System.out.println(hashMap.containsKey(1)); // true
        System.out.println(hashMap.containsKey(6)); // false
        System.out.println(hashMap.containsValue("汾酒"));    // true
        System.out.println(hashMap.containsValue("二锅头"));   // false
    }
}

5.isEmpty()

        判断该 Map 集合是否为空。

public class MapTest {
    public static void main(String[] args) {
        HashMap<Integer, String> hashMap = new HashMap<>();
        hashMap.put(1, "茅台");
        hashMap.put(2, "五粮液");
        hashMap.put(3, "剑南春");
        hashMap.put(4, "古井贡酒");
        hashMap.put(5, "汾酒");
        System.out.println(hashMap.isEmpty());  // false
        hashMap.clear();
        System.out.println(hashMap.isEmpty());  // true
    }
}

6.remove(Object key)

        通过 key 删除键值对。

public class MapTest {
    public static void main(String[] args) {
        HashMap<Integer, String> hashMap = new HashMap<>();
        hashMap.put(1, "茅台");
        hashMap.put(2, "五粮液");
        hashMap.put(3, "剑南春");
        hashMap.put(4, "古井贡酒");
        hashMap.put(5, "汾酒");
        hashMap.remove(1);
        System.out.println(hashMap);    // {2=五粮液, 3=剑南春, 4=古井贡酒, 5=汾酒}
    }
}

7.values()

        获取所有的 value 。

public class MapTest {
    public static void main(String[] args) {
        HashMap<Integer, String> hashMap = new HashMap<>();
        hashMap.put(1, "茅台");
        hashMap.put(2, "五粮液");
        hashMap.put(3, "剑南春");
        hashMap.put(4, "古井贡酒");
        hashMap.put(5, "汾酒");
        System.out.println(hashMap.values());   // [茅台, 五粮液, 剑南春, 古井贡酒, 汾酒]
    }
}

8.of(K k1, V v1, K k2, V v2)

        静态方法,使用现有的 key-value 构造 Map 集合。

public class MapTest {
    public static void main(String[] args) {
        Map<Integer, String> map = Map.of(1, "茅台", 2, "五粮液", 3, "剑南春", 4, "古井贡酒", 5, "汾酒");
        System.out.println(map);    // {1=茅台, 2=五粮液, 3=剑南春, 4=古井贡酒, 5=汾酒}
    }
}

9.遍历

(1)keySet()

        获取所有的 key 。

public class MapTest {
    public static void main(String[] args) {
        HashMap<Integer, String> hashMap = new HashMap<>();
        hashMap.put(1, "中华");
        hashMap.put(2, "九五至尊");
        hashMap.put(3, "芙蓉王");
        hashMap.put(4, "南京");
        hashMap.put(5, "兰州");

        // 遍历集合:获取 Map 集合的所有 key,然后通过遍历 key 获取 value
        Set<Integer> keys = hashMap.keySet();
        Iterator<Integer> iterator = keys.iterator();
        while (iterator.hasNext()) {
            Integer key = iterator.next();
            String value = hashMap.get(key);
            System.out.print(key + ":" + value + "\t");
        }
        // 1:中华	2:九五至尊	3:芙蓉王	4:南京	5:兰州
    }
}
public class MapTest {
    public static void main(String[] args) {
        HashMap<Integer, String> hashMap = new HashMap<>();
        hashMap.put(1, "中华");
        hashMap.put(2, "九五至尊");
        hashMap.put(3, "芙蓉王");
        hashMap.put(4, "南京");
        hashMap.put(5, "兰州");

        // 遍历集合:获取 Map 集合的所有 key,然后通过遍历 key 获取 value
        Set<Integer> keys = hashMap.keySet();
        for (Integer key : keys) {
            String value = hashMap.get(key);
            System.out.print(key + ":" + value + "\t");
        }
        // 1:中华	2:九五至尊	3:芙蓉王	4:南京	5:兰州
    }
}

(2)entrySet()

        获取所有键值对的 Set 视图。效率较高,建议使用此方式。

public class MapTest {
    public static void main(String[] args) {
        HashMap<Integer, String> hashMap = new HashMap<>();
        hashMap.put(1, "中华");
        hashMap.put(2, "九五至尊");
        hashMap.put(3, "芙蓉王");
        hashMap.put(4, "南京");
        hashMap.put(5, "兰州");

        // 遍历集合:获取 Map 集合的所有 key,然后通过遍历 key 获取 value
        Set<Map.Entry<Integer, String>> entries = hashMap.entrySet();
        Iterator<Map.Entry<Integer, String>> iterator = entries.iterator();
        while (iterator.hasNext()) {
            Map.Entry<Integer, String> next = iterator.next();
            Integer key = next.getKey();
            String value = next.getValue();
            System.out.print(key + ":" + value + "\t");
        }
        // 1:中华	2:九五至尊	3:芙蓉王	4:南京	5:兰州
    }
}
public class MapTest {
    public static void main(String[] args) {
        HashMap<Integer, String> hashMap = new HashMap<>();
        hashMap.put(1, "中华");
        hashMap.put(2, "九五至尊");
        hashMap.put(3, "芙蓉王");
        hashMap.put(4, "南京");
        hashMap.put(5, "兰州");

        // 遍历集合:获取 Map 集合的所有 key,然后通过遍历 key 获取 value
        Set<Map.Entry<Integer, String>> entries = hashMap.entrySet();
        for (Map.Entry<Integer, String> entry : entries) {
            System.out.print(entry.getKey() + ":" + entry.getValue() + "\t");
        }
        // 1:中华	2:九五至尊	3:芙蓉王	4:南京	5:兰州
    }
}

相关文章:

  • 电网电压暂态扰动机理与工业设备抗失压防护策略研究
  • 【SpringBoot】深入剖析 Spring Boot 自动装配原理(附源码与实战)
  • 内存检测工具——Qt Creator
  • git使用命令总结
  • python总结(3)
  • QT工程打开、编译、运行流程
  • Netty基础—2.网络编程基础三
  • Dify平台训练个人文档助手
  • 2024年群智能SCI1区TOP:混沌可行性恢复粒子群算法CEPSO,深度解析+性能实测
  • 20250212:linux系统DNS解析卡顿5秒的bug
  • 关于mybatis查询时,时间字段的映射问题
  • Java 集合框架大师课:集合框架源码解剖室(五)
  • 内网安全防护新思路 —— HFish + ELK 与 T-Pot 全面蜜罐系统比较分析
  • Ollama杂记
  • bin/python: bad interpreter: No such file or directory
  • Python:正则表达式
  • Java数据结构第二十二期:Map与Set的高效应用之道(一)
  • Nginx正向代理HTTPS配置指南(仅供参考)
  • K8s 1.27.1 实战系列(十)PV PVC
  • 三角形页面
  • 央媒评网红质疑胖东来玉石定价暴利:对碰瓷式维权不能姑息
  • 体坛联播|C罗儿子完成国家队首秀,德约结束与穆雷合作
  • 外国游客“在华扫货”热:“带空箱子到中国!”
  • 中国女足将于5月17日至6月2日赴美国集训并参加邀请赛
  • 上海国际电影节特设“今日亚洲”单元
  • 中美经贸高层会谈在瑞士日内瓦举行