当前位置:   article > 正文

数据结构之Set和Map

数据结构之Set和Map

1、HashSet:

  1. package com.datastructure.set;
  2. import java.util.HashSet;
  3. //不允许重复元素
  4. public class HashSetDemo {
  5. public static void main(String[] args) {
  6. HashSet<String> set = new HashSet<>();
  7. // 添加元素
  8. set.add("apple");
  9. set.add("banana");
  10. set.add("orange");
  11. set.add("mango");
  12. set.add("mango");
  13. System.out.println("HashSet: " + set); // 输出: HashSet: [apple, banana, orange, mango]
  14. // 检查元素是否存在
  15. boolean containsApple = set.contains("apple");
  16. System.out.println("Contains 'apple': " + containsApple); // 输出: Contains 'apple': true
  17. // 删除元素
  18. set.remove("banana");
  19. System.out.println("HashSet: " + set); // 输出: HashSet: [apple, orange, mango]
  20. // 获取元素数量
  21. int size = set.size();
  22. System.out.println("Size of HashSet: " + size); // 输出: Size of HashSet: 3
  23. // 清空集合
  24. set.clear();
  25. System.out.println("HashSet: " + set); // 输出: HashSet: []
  26. }
  27. }

2、TreeSet:

  1. package com.datastructure.set;
  2. import java.util.TreeSet;
  3. //TreeSet是有序的,输出结果会按照升序排列。
  4. //TreeSet还提供了一些便捷的方法来获取小于等于、严格小于、大于等于、严格大于给定元素的最值元素,
  5. //分别是floor(), lower(), ceiling()和higher()方法。
  6. //使用TreeSet,可以方便地存储一组有序的不重复元素,并且可以高效地执行判断、添加、删除等操作。
  7. public class TreeSetDemo {
  8. public static void main(String[] args) {
  9. TreeSet<Integer> set = new TreeSet<>();
  10. // 添加元素
  11. set.add(5);
  12. set.add(2);
  13. set.add(8);
  14. set.add(3);
  15. System.out.println("TreeSet: " + set); // 输出: TreeSet: [2, 3, 5, 8]
  16. // 检查元素是否存在
  17. boolean contains5 = set.contains(5);
  18. System.out.println("Contains 5: " + contains5); // 输出: Contains 5: true
  19. // 删除元素
  20. set.remove(8);
  21. System.out.println("TreeSet: " + set); // 输出: TreeSet: [2, 3, 5]
  22. // 获取第一个和最后一个元素
  23. int first = set.first();
  24. int last = set.last();
  25. System.out.println("First element: " + first); // 输出: First element: 2
  26. System.out.println("Last element: " + last); // 输出: Last element: 5
  27. // 获取小于等于给定元素的最大元素
  28. int floor = set.floor(4);
  29. System.out.println("Floor of 4: " + floor); // 输出: Floor of 4: 3
  30. // 获取严格小于给定元素的最大元素
  31. int lower = set.lower(4);
  32. System.out.println("Lower of 4: " + lower); // 输出: Lower of 4: 3
  33. // 获取大于等于给定元素的最小元素
  34. int ceiling = set.ceiling(4);
  35. System.out.println("Ceiling of 4: " + ceiling); // 输出: Ceiling of 4: 5
  36. // 获取严格大于给定元素的最小元素
  37. int higher = set.higher(4);
  38. System.out.println("Higher of 4: " + higher); // 输出: Higher of 4: 5
  39. // 清空集合
  40. set.clear();
  41. System.out.println("TreeSet: " + set); // 输出: TreeSet: []
  42. }
  43. }

3、HashMap

  1. package com.datastructure.map;
  2. import java.util.HashMap;
  3. import java.util.Iterator;
  4. import java.util.Map;
  5. import java.util.Map.Entry;
  6. //HashMap可以存储不重复的键和对应的值,并且可以根据键来获取对应的值。
  7. //首先创建一个HashMap对象,并使用put()方法来添加键值对。键的类型通常是String,值可以是任意类型。
  8. //使用get()方法根据键来获取对应的值,使用containsKey()方法来检查键是否存在,使用remove()方法来删除键值对。
  9. //还可以使用entrySet()方法来获取键值对的Set视图,然后通过遍历Set视图的方式来遍历HashMap。
  10. //在遍历过程中,可以使用getKey()和getValue()方法分别获取键和值。
  11. //HashMap并不保证键值对的顺序,如果需要有序的存储和访问,可以考虑使用LinkedHashMap。
  12. public class HashMapDemo {
  13. public static void main(String[] args) {
  14. // 创建HashMap对象
  15. HashMap<String, Integer> map = new HashMap<>();
  16. // 添加键值对
  17. map.put("apple", 5);
  18. map.put("banana", 2);
  19. map.put("orange", 3);
  20. // 获取值
  21. int appleCount = map.get("apple");
  22. System.out.println("Apple count: " + appleCount); // 输出: Apple count: 5
  23. // 检查键是否存在
  24. boolean containsBanana = map.containsKey("banana");
  25. System.out.println("Contains banana: " + containsBanana); // 输出: Contains banana: true
  26. // 删除键值对
  27. map.remove("orange");
  28. System.out.println("HashMap: " + map); // 输出: HashMap: {apple=5, banana=2}
  29. // 遍历HashMap
  30. for (Map.Entry<String, Integer> entry : map.entrySet()) {
  31. String key = entry.getKey();
  32. int value = entry.getValue();
  33. System.out.println(key + ": " + value);
  34. }
  35. /*
  36. 输出:
  37. apple: 5
  38. banana: 2
  39. */
  40. // 使用迭代器,遍历linkedHashMap,并打印键值对
  41. Iterator<Entry<String, Integer>> iterator = map.entrySet().iterator();
  42. while (iterator.hasNext()) {
  43. Entry<String, Integer> entry = iterator.next();
  44. System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
  45. }
  46. // 清空HashMap
  47. map.clear();
  48. System.out.println("HashMap: " + map); // 输出: HashMap: {}
  49. }
  50. }

 4、TreeMap:

  1. package com.datastructure.map;
  2. import java.util.TreeMap;
  3. import java.util.Iterator;
  4. import java.util.Map;
  5. import java.util.Map.Entry;
  6. //TreeMap是实现了SortedMap接口的集合,它基于红黑树的数据结构来存储数据.
  7. //并且可以根据键的自然顺序或自定义顺序进行排序。
  8. //首先创建一个TreeMap对象,并使用put()方法来添加键值对。
  9. //与HashMap不同的是,TreeMap会根据键的自然顺序进行排序,如果键是自定义类型,则需要实现Comparable接口或提供Comparator对象来指定排序规则。
  10. //然后,使用get()方法根据键来获取对应的值,使用containsKey()方法来检查键是否存在,使用remove()方法来删除键值对。
  11. //还可以使用entrySet()方法来获取键值对的Set视图,然后通过遍历Set视图的方式来遍历TreeMap。最后,使用clear()方法来清空TreeMap。
  12. //TreeMap是一种有序的集合,它通过红黑树结构来存储数据,可以快速地插入、删除和查找元素,同时还可以根据键的顺序进行排序。
  13. //由于红黑树结构的存在,TreeMap的插入、删除和查找操作的时间复杂度是O(logN),相对于HashMap的O(1)会稍微慢一些。
  14. public class TreeMapDemo {
  15. public static void main(String[] args) {
  16. // 创建TreeMap对象
  17. TreeMap<String, Integer> map = new TreeMap<>();
  18. // 添加键值对
  19. map.put("apple", 5);
  20. map.put("banana", 2);
  21. map.put("orange", 3);
  22. // 获取值
  23. int appleCount = map.get("apple");
  24. System.out.println("Apple count: " + appleCount); // 输出: Apple count: 5
  25. // 检查键是否存在
  26. boolean containsBanana = map.containsKey("banana");
  27. System.out.println("Contains banana: " + containsBanana); // 输出: Contains banana: true
  28. // 删除键值对
  29. map.remove("orange");
  30. System.out.println("TreeMap: " + map); // 输出: TreeMap: {apple=5, banana=2}
  31. // 遍历TreeMap
  32. for (Map.Entry<String, Integer> entry : map.entrySet()) {
  33. String key = entry.getKey();
  34. int value = entry.getValue();
  35. System.out.println(key + ": " + value);
  36. }
  37. /*
  38. 输出:
  39. apple: 5
  40. banana: 2
  41. */
  42. // 使用迭代器,遍历TreeMap,并打印键值对
  43. Iterator<Entry<String, Integer>> iterator = map.entrySet().iterator();
  44. while (iterator.hasNext()) {
  45. Entry<String, Integer> entry = iterator.next();
  46. System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
  47. }
  48. // 清空TreeMap
  49. map.clear();
  50. System.out.println("TreeMap: " + map); // 输出: TreeMap: {}
  51. }
  52. }

5、LinkedHashMap:

  1. package com.datastructure.map;
  2. import java.util.Iterator;
  3. import java.util.LinkedHashMap;
  4. import java.util.Map;
  5. //LinkedHashMap会保持插入顺序,因此输出结果的顺序与添加键值对的顺序一致。
  6. public class LinkedHashMapExample {
  7. public static void main(String[] args) {
  8. // 创建一个LinkedHashMap实例
  9. LinkedHashMap<Integer, String> linkedHashMap = new LinkedHashMap<>();
  10. // 向linkedHashMap中添加键值对
  11. linkedHashMap.put(1, "One");
  12. linkedHashMap.put(2, "Two");
  13. linkedHashMap.put(3, "Three");
  14. linkedHashMap.put(4, "Four");
  15. linkedHashMap.put(5, "Five");
  16. // 遍历linkedHashMap,并打印键值对
  17. for (Map.Entry<Integer, String> entry : linkedHashMap.entrySet()) {
  18. System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
  19. }
  20. // 使用迭代器,遍历linkedHashMap,并打印键值对
  21. Iterator<Map.Entry<Integer, String>> iterator = linkedHashMap.entrySet().iterator();
  22. while (iterator.hasNext()) {
  23. Map.Entry<Integer, String> entry = iterator.next();
  24. System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
  25. }
  26. }
  27. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/383324
推荐阅读
相关标签
  

闽ICP备14008679号