Java API 之聚集框架进阶 [复制链接]
发表于 2024-9-15 22:31:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
前言: 本文主要解说聚集框架中的List、Set、Map接口中的进阶知识,主要是分析其底层原理和优缺点。

1. List 接口

   1.1 ArrayList

  1. import java.util.ArrayList;
  2. import java.util.List;
  3. public class ArrayListExample {
  4.     public static void main(String[] args) {
  5.         // 创建一个ArrayList对象,初始容量为10
  6.         List<String> list = new ArrayList<>(10);
  7.         // 添加元素
  8.         list.add("Apple");
  9.         list.add("Banana");
  10.         list.add("Orange");
  11.         // 打印列表内容
  12.         System.out.println(list); // 输出: [Apple, Banana, Orange]
  13.         // 访问元素
  14.         System.out.println(list.get(1)); // 输出: Banana
  15.         // 插入元素
  16.         list.add(1, "Grape"); // 在索引1处插入元素
  17.         System.out.println(list); // 输出: [Apple, Grape, Banana, Orange]
  18.         // 删除元素
  19.         list.remove(2); // 删除索引2处的元素
  20.         System.out.println(list); // 输出: [Apple, Grape, Orange]
  21.     }
  22. }
复制代码
底层原理分析:


  • 动态数组: ArrayList 底层利用一个数组来存储元素。
  • 扩容机制: 当数组空间不敷时,会创建一个新的更大容量的数组,将原数组元素复制到新数组中。扩容因子通常为 1.5,这意味着每次扩容,新数组的容量是原数组容量的 1.5 倍。比方,如果初始容量为 10,当添加第 11 个元素时,会创建一个容量为 15 的新数组,并将原数组元素复制到新数组中。
  • 长处: 随机访问效率高,可以通过索引直接访问元素。
  • 缺点: 插入和删除元素效率较低,尤其是对于中间位置的元素。因为必要移动后面的元素才气插入或删除元素。
   1.2 LinkedList

  1. import java.util.LinkedList;
  2. import java.util.List;
  3. public class LinkedListExample {
  4.     public static void main(String[] args) {
  5.         // 创建一个LinkedList对象
  6.         List<String> list = new LinkedList<>();
  7.         // 添加元素
  8.         list.add("Apple");
  9.         list.add("Banana");
  10.         list.add("Orange");
  11.         // 打印列表内容
  12.         System.out.println(list); // 输出: [Apple, Banana, Orange]
  13.         // 访问元素
  14.         System.out.println(list.get(1)); // 输出: Banana
  15.         // 插入元素
  16.         list.add(1, "Grape"); // 在索引1处插入元素
  17.         System.out.println(list); // 输出: [Apple, Grape, Banana, Orange]
  18.         // 删除元素
  19.         list.remove(2); // 删除索引2处的元素
  20.         System.out.println(list); // 输出: [Apple, Grape, Orange]
  21.     }
  22. }
复制代码
底层原理分析:


  • 双向链表: LinkedList 底层利用双向链表来存储元素。每个节点包含元素和指向前驱节点和后继节点的指针。
  • 长处: 插入和删除元素效率高,尤其是在头部或尾部。因为只必要修改指针即可,不必要移动元素。
  • 缺点: 随机访问效率较低,必要从头部或尾部开始遍历。


2. Set 接口

   2.1 HashSet

  1. import java.util.HashSet;
  2. import java.util.Set;
  3. public class HashSetExample {
  4.     public static void main(String[] args) {
  5.         // 创建一个HashSet对象
  6.         Set<String> set = new HashSet<>();
  7.         // 添加元素
  8.         set.add("Apple");
  9.         set.add("Banana");
  10.         set.add("Orange");
  11.         set.add("Apple"); // 重复元素不会被添加
  12.         // 打印集合内容
  13.         System.out.println(set); // 输出: [Banana, Apple, Orange] (顺序可能不同)
  14.         // 判断元素是否存在
  15.         System.out.println(set.contains("Banana")); // 输出: true
  16.     }
  17. }
复制代码
底层原理分析:


  • 哈希表: HashSet 底层利用哈希表来存储元素。哈希表是一种利用哈希函数将元素映射到数组中的特定位置的数据布局。
  • 哈希辩说: 当多个元素的哈希值相同,就会发生哈希辩说。HashSet 利用链表或红黑树来解决哈希辩说。
  • 长处: 元素查找效率高。
  • 缺点: 元素顺序不固定。
   2.2 TreeSet

  1. import java.util.TreeSet;
  2. import java.util.Set;
  3. public class TreeSetExample {
  4.     public static void main(String[] args) {
  5.         // 创建一个TreeSet对象
  6.         Set<String> set = new TreeSet<>();
  7.         // 添加元素
  8.         set.add("Apple");
  9.         set.add("Banana");
  10.         set.add("Orange");
  11.         // 打印集合内容
  12.         System.out.println(set); // 输出: [Apple, Banana, Orange] (有序)
  13.         // 判断元素是否存在
  14.         System.out.println(set.contains("Banana")); // 输出: true
  15.     }
  16. }
复制代码
底层原理分析:


  • 红黑树: TreeSet 底层利用红黑树来存储元素。红黑树是一种自平衡二叉搜索树,可以保证元素有序,并提供高效的查找、插入和删除操作。
  • 长处: 元素有序,查找效率高。
  • 缺点: 插入和删除元素效率相对较低。


3. Map 接口

   3.1HashMap

  1. import java.util.HashMap;
  2. import java.util.Map;
  3. public class HashMapExample {
  4.     public static void main(String[] args) {
  5.         // 创建一个HashMap对象
  6.         Map<String, Integer> map = new HashMap<>();
  7.         // 添加元素
  8.         map.put("Apple", 1);
  9.         map.put("Banana", 2);
  10.         map.put("Orange", 3);
  11.         // 获取元素
  12.         System.out.println(map.get("Banana")); // 输出: 2
  13.         // 判断元素是否存在
  14.         System.out.println(map.containsKey("Apple")); // 输出: true
  15.     }
  16. }
复制代码
底层原理分析:


  • 哈希表: HashMap 底层利用哈希表来存储键值对。
  • 哈希辩说: 当多个键的哈希值相同,就会发生哈希辩说。HashMap 利用链表或红黑树来解决哈希辩说。
  • 长处: 查找效率高。
  • 缺点: 元素顺序不固定。
   3.2 TreeMap

  1. import java.util.TreeMap;
  2. import java.util.Map;
  3. public class TreeMapExample {
  4.     public static void main(String[] args) {
  5.         // 创建一个TreeMap对象
  6.         Map<String, Integer> map = new TreeMap<>();
  7.         // 添加元素
  8.         map.put("Apple", 1);
  9.         map.put("Banana", 2);
  10.         map.put("Orange", 3);
  11.         // 打印Map内容
  12.         System.out.println(map); // 输出: {Apple=1, Banana=2, Orange=3} (有序)
  13.         // 获取元素
  14.         System.out.println(map.get("Banana")); // 输出: 2
  15.         // 判断元素是否存在
  16.         System.out.println(map.containsKey("Apple")); // 输出: true
  17.     }
  18. }
复制代码
底层原理分析:


  • 红黑树: TreeMap 底层利用红黑树来存储键值对。
  • 长处: 元素有序,查找效率高。
  • 缺点: 插入和删除元素效率相对较低。

结语:以上就是关于 List、Set、Map接口中的进阶知识详解,希望对各位看官有所资助,感谢各位看官的观看,下期见,谢谢~

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

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表