Map 和 Set

打印 上一主题 下一主题

主题 1014|帖子 1014|积分 3042

目录

一、搜刮
概念:
模型:
二、Map
​编辑
      1.Map 实例化:
   2. Map的常见方法:

3.Map的常见方法演示:
1. put(K key, V value):添加键值对
3. containsKey(Object key):查抄键是否存在
4. containsValue(Object value):查抄值是否存在
5. remove(Object key):删除指定键的键值对
6. keySet():获取所有键的集合
7. values():获取所有值的集合
8. entrySet():遍历所有键值对
9.  getOrDefault(Object key, V defaultValue);
4.Map 的注意事项:
三、Set
1. Set 常见方法:
2. Set 常见方法演示:
containsAll 方法:
addAll 方法:

3.Set 的注意事项:


   一、搜刮

  概念:

        在之前,以前我们学习常见的搜刮方式有:
        1. 直接遍历,元素如果比较多效率会非常慢。
        2. 二分查找,但搜刮前必须要求序列是有序的。
        上述排序比较得当静态范例的查找,即⼀般不会对区间进行插入和删除操纵了,而现实中的查找好比:
        1. 根据姓名查询考试成绩
        2. 通讯录,即根据姓名查询接洽方式
        3. 不重复集合,即需要先搜刮关键字是否已经在集合中
        可能在查找时进行⼀些插入和删除的操纵,即动态查找,那上述两种方式就不太得当了,以是下文介绍的 MapSet是⼀种得当动态查找的集合容器。
        
模型:

        一般把搜刮的数据称为关键字(Key),和关键字对应的称为值(Value),将其称之为Key-value的键值对,以是模型会有两种
        
        1. 纯 key 模型:由唯一的键(key)构成,没有与键直接关联的特定值(value)。
        有⼀个英文辞书,快速查找⼀个单词是否在辞书中
        快速查找某个名字在不在通讯录中
        
        2. Key-Value 模型:是一种键(key)和值(value)进行相关联的数据构造情势。每个键都对应着一个特定的值,通过键可以快速查找、更新与之关联的值。如查找在一串字符串中查找,某个单词在该字符串中出现的次数。
        统计文件中每个单词出现的次数,统计结果是每个单词都有与其对应的次数:<单词,单词出现的次数>。
         梁山好汉的江湖绰号:每个好汉都有自己的江湖绰号
        
        并且,要注意的是:
        Map 中存储的就是key-value的键值对,Set中只存储了Key。
        
   二、Map

  


         可以看到,HashMap 和 TreeMap 都实现了 Map 接口。
        那么,就可以 利用 Map 接口范例的变量来引用 HashMap 或 TreeMap 的实例化:
      1.Map 实例化:

  1. Map<String, Integer> map1 = new TreeMap<>();
  2. Map<String, Integer> map2 = new HashMap<>();
复制代码
         Map是一个接口,不能直接实例化对象,如果要实例化对象只能通过其实现类TreeMap或者HashMap来实现。
        Map该接口类中存储的是结构的键值对,并且K⼀定是唯⼀的(好比上面代码的String ),不能重复。
   2. Map的常见方法:

        



3.Map的常见方法演示:

以 HashMap 实例化 Map 接口演示:  
  1. Map<String, Integer> hashMap = new HashMap<>();
复制代码
1. put(K key, V value):添加键值对

  1. hashMap.put("Apple", 10);
  2. hashMap.put("Banana", 5);
  3. hashMap.put("Orange", 8);
复制代码
2. get(Object key):根据键获取值
  1. int appleCount = hashMap.get("Apple");
  2. System.out.println(appleCount); // 10
复制代码
3. containsKey(Object key):查抄键是否存在

  1. boolean hasMango = hashMap.containsKey("Mango");
  2. System.out.println(hasMango); // false
复制代码
4. containsValue(Object value):查抄值是否存在

  1. boolean hasCount5 = hashMap.containsValue(5);
  2. System.out.println(hasCount5); // true
复制代码
5. remove(Object key):删除指定键的键值对

  1. hashMap.remove("Banana");
  2. System.out.println(hashMap); // {Apple=10, Orange=8}
复制代码
6. keySet():获取所有键的集合

  1. for (String key : hashMap.keySet()) {
  2.     System.out.println("Key: " + key);
  3. }
  4. // 输出:
  5. // Key: Apple
  6. // Key: Orange
复制代码
7. values():获取所有值的集合

  1. for (int value : hashMap.values()) {
  2.     System.out.println("Value: " + value);
  3. }
  4. // 输出:
  5. // Value: 10
  6. // Value: 8
复制代码
8. entrySet():遍历所有键值对

  1. for (Map.Entry<String, Integer> entry : hashMap.entrySet()) {
  2.     System.out.println(entry.getKey() + " -> " + entry.getValue());
  3. }
  4. // 输出:
  5. // Apple -> 10
  6. // Orange -> 8
复制代码
9.  getOrDefault(Object key, V defaultValue);

该方法会尝试根据给定的键从中获取对应的值。如果键存在,就返回该键对应的值;若键不存在,则返回你提供的默认值(defaultValue)。
  1. int integer = hashMap.getOrDefault("Apple",666);
  2.         System.out.println(integer); // 10
  3.         int integer1 = hashMap.getOrDefault("waht",666);
  4.         System.out.println(integer1); // 666
复制代码

4.Map 的注意事项:

        
1. Map是⼀个接口,不能直接实例化对象,如果要实例化对象只能实例化其实现类TreeMap或者 HashMap

2. Map中存放键值对的Key是唯⼀的,value是可以重复的,(当put相同的key,差别的value值时,只是将key所对应的value值进行替换,以最后存放的value为主)。
  1. Map<String, Integer> hashMap = new HashMap<>();        hashMap.put("Apple", 10);        hashMap.put("Apple",15);        hashMap.put("Apple",40);        System.out.println(hashMap.get("Apple")); // 40
复制代码
 
3. HashMap的key和value都可以为空,在TreeMap中插入键值对时,key不能为空,value可以为空。

4.Map中键值对的Key不能直接修改,value可以修改,如果要修改key,只能先将该key删撤除,然 后再重新插入。
        
TreeMap和HashMap是Map的接口实现类,用于存储键对值数据,以下是他们的区别:       


   三、Set

  Set与Map重要的差别有两点:Set是继续自Collection的接口类,Set中只存储了Key。


1. Set 常见方法:



  • add(E e):如果指定元素不存在于集合中,则将其添加到集合里。添加成功返回 true,若元素已存在则返回 false。
  • remove(Object o):如果集合中存在指定元素,则将其移除。移除成功返回 true,若元素不存在则返回 false。
  • contains(Object o):判断集合中是否包含指定元素,包含则返回 true,否则返回 false。
  • size():返回集合中元素的数量。
  • isEmpty():判断集合是否为空,为空返回 true,否则返回 false。
  • clear():移除集合中的所有元素。
  • iterator():返回一个用于遍历集合的迭代器。
  • toArray():将set中的元素转换为数组。
  • containsAll: 是否包含指定集合的所有元素。
  •  addAll:将集合中的元素添加到指定集合中。如果添加的元素在当前集合中已经存在,则不会重复添加。
2. Set 常见方法演示:

  1. public static void main(String[] args) {
  2.         // 创建一个 HashSet 实例,使用 Set 接口引用
  3.         Set<String> set = new HashSet<>();
  4.         // 1. add(E e) 方法:添加元素
  5.         set.add("apple");
  6.         set.add("banana");
  7.         set.add("cherry");
  8.         System.out.println("添加元素后的集合: " + set); //[banana, apple, cherry]
  9.         // 尝试添加重复元素
  10.         boolean isAdded = set.add("apple");
  11.         System.out.println("尝试添加重复元素 'apple',是否添加成功: " + isAdded); // false
  12.         System.out.println("添加重复元素后的集合: " + set); //[banana, apple, cherry]
  13.         // 2. remove(Object o) 方法:移除元素
  14.         boolean isRemoved = set.remove("banana");
  15.         System.out.println("移除元素 'banana',是否移除成功: " + isRemoved); //true
  16.         System.out.println("移除元素后的集合: " + set); // [apple, cherry]
  17.         // 3. contains(Object o) 方法:判断元素是否存在
  18.         boolean containsElement = set.contains("cherry");
  19.         System.out.println("集合中是否包含元素 'cherry': " + containsElement); //true
  20.         // 4. size() 方法:获取集合元素数量
  21.         int size = set.size();
  22.         System.out.println("集合中元素的数量: " + size); // 2
  23.         // 5. isEmpty() 方法:判断集合是否为空
  24.         boolean isEmpty = set.isEmpty();
  25.         System.out.println("集合是否为空: " + isEmpty); //false
  26.         // 6. clear() 方法:清空集合
  27.         set.clear();
  28.         System.out.println("清空集合后,集合是否为空: " + set.isEmpty()); //true
  29.         // 重新添加元素
  30.         set.add("date");
  31.         set.add("elderberry");
  32.         // 7. iterator() 方法:使用迭代器遍历集合
  33.         System.out.println("使用迭代器遍历集合:");
  34.         Iterator<String> iterator = set.iterator();
  35.         while (iterator.hasNext()) {
  36.             System.out.println(iterator.next());
  37.         }
  38.         
  39.         //date
  40.         //elderberry
  41.     }
复制代码
toArray 方法 :
  1. Set<Integer> set1 = new HashSet<>();
  2.         set1.add(5);
  3.         set1.add(20);
  4.         set1.add(15);
  5.         set1.add(8);
  6.         Integer[] toArray = set1.toArray(new Integer[0]);
  7.         for (Integer a : toArray) {
  8.             System.out.print(a + " ");
  9.         }
  10.         System.out.println(); // 20 5 8 15
复制代码
containsAll 方法:

  1. Set<String> set1 = new HashSet<>();
  2.         set1.add("apple");
  3.         set1.add("banana");
  4.         set1.add("cherry");
  5.         Set<String> set2 = new HashSet<>();
  6.         set2.add("apple");
  7.         set2.add("banana");
  8.         boolean result = set1.containsAll(set2);
  9.         System.out.println("set1 是否包含 set2 中的所有元素: " + result); //true
复制代码
addAll 方法:

  1. Set<String> set1 = new HashSet<>();
  2.         set1.add("apple");
  3.         set1.add("banana");
  4.         Set<String> set2 = new HashSet<>();
  5.         set2.add("banana");
  6.         set2.add("cherry");
  7.         set1.addAll(set2);
  8.         System.out.println("添加元素后的 set1: " + set1); // [banana, apple, cherry]
复制代码


3.Set 的注意事项:

1. Set 可以对集合进行去重。
2. Set只存储了key,并且要求key一定要唯一。
3其key值不能进行修改,如果要修改需要删除后,再重新插入。
4. TreeSet的底层是使⽤Map来实现的,其使⽤key与Object的⼀个默认对象作为键值对插⼊到Map中 的 。 在 TreeSet 中,要存储的元素被作为 TreeMap 的 key,而 TreeMap 的 value 则统一利用一个静态的、不可变的 Object 对象来占位,因为 TreeSet 只关心元素自己,并不需要额外存储与元素关联的值。


  TreeSet 和 HashSet 的区别:
        


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天津储鑫盛钢材现货供应商

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表