网站首页 > java教程 正文
Java集合框架的内部揭秘:List、Set与Map的深潜之旅
Java集合框架是一套强大的工具,为开发者提供了灵活的数据管理方式。本文将深入剖析List、Set和Map的内部机制,通过详细的示例和扩展讨论,带你领略这些数据容器的真谛。
一、List:有序序列的深度剖析
List接口是一个可以包含重复元素的有序集合。Java中,ArrayList和LinkedList是最常见的List实现。
- ArrayList:基于动态数组,支持随机访问,但插入和删除效率较低。
import java.util.ArrayList;
public class ArrayListExample {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
System.out.println(numbers.get(0)); // 输出 1
System.out.println(numbers.size()); // 输出 2
// 插入和删除操作
numbers.add(1, 3);
System.out.println(numbers); // 输出 [1, 3, 2]
numbers.remove(1);
System.out.println(numbers); // 输出 [1, 2]
}
}
- LinkedList:基于链表,适合频繁的插入和删除,但不支持随机访问。
import java.util.LinkedList;
public class LinkedListExample {
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(1);
numbers.add(2);
System.out.println(numbers.getFirst()); // 输出 1
System.out.println(numbers.getLast()); // 输出 2
// 插入和删除操作
numbers.addFirst(0);
System.out.println(numbers); // 输出 [0, 1, 2]
numbers.removeLast();
System.out.println(numbers); // 输出 [0, 1]
}
}
二、Set:唯一元素的守护者
Set接口确保集合中元素的唯一性,不支持重复元素。主要实现包括HashSet和TreeSet。
- HashSet:基于哈希表,提供快速的元素查找和插入。
import java.util.HashSet;
public class HashSetExample {
public static void main(String[] args) {
HashSet<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(2);
numbers.add(2); // 重复元素不会被添加
System.out.println(numbers.contains(1)); // 输出 true
System.out.println(numbers.size()); // 输出 2
}
}
- TreeSet:基于红黑树,自动排序元素,适用于需要有序集合的场景。
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
TreeSet<Integer> numbers = new TreeSet<>();
numbers.add(2);
numbers.add(1);
numbers.add(3);
System.out.println(numbers); // 输出 [1, 2, 3]
}
}
三、Map:键值对的管理大师
Map接口用于存储键值对,键必须是唯一的。HashMap和TreeMap是最常见的Map实现。
- HashMap:基于哈希表,提供快速的键值对查找。
import java.util.HashMap;
public class HashMapExample {
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
map.put(1, "One");
map.put(2, "Two");
System.out.println(map.get(1)); // 输出 One
System.out.println(map.containsKey(2)); // 输出 true
}
}
- TreeMap:基于红黑树,键值对自动排序,适用于需要排序的键值对场景。
import java.util.TreeMap;
public class TreeMapExample {
public static void main(String[] args) {
TreeMap<Integer, String> map = new TreeMap<>();
map.put(2, "Two");
map.put(1, "One");
map.put(3, "Three");
System.out.println(map); // 输出 {1=One, 2=Two, 3=Three}
}
}
扩展讨论:迭代器与增强for循环
迭代器(Iterator)和增强for循环(Enhanced For Loop)是遍历集合的常用方式。
import java.util.ArrayList;
import java.util.Iterator;
public class IteratorExample {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
// 使用迭代器遍历
Iterator<Integer> iterator = numbers.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
// 使用增强for循环遍历
for (Integer number : numbers) {
System.out.println(number);
}
}
}
四、深入探讨:性能与场景的权衡
- 性能考量:ArrayList和HashMap在大多数情况下提供最佳性能,因为它们基于哈希表和数组,而LinkedList和TreeSet/TreeMap则在特定场景下表现更佳,如频繁的插入删除或需要排序的场合。
- 内存消耗:LinkedList由于额外的节点指针,比ArrayList占用更多内存;TreeSet和TreeMap也因为树的结构而消耗更多内存。
- 并发安全性:默认情况下,上述容器都不支持线程安全,但在高并发场景下,可以考虑使用Collections.synchronizedList()、Collections.synchronizedSet()、Collections.synchronizedMap(),或者ConcurrentHashMap等并发容器。
猜你喜欢
- 2024-11-02 java中判断list不为空的工具类(java list 判断空)
- 2024-11-02 如何在Java 8中处理对象类型的List集合:交集、并集、差集及去重
- 2024-11-02 java 集合类之List(二)(java中集合类有哪些)
- 2024-11-02 面试官问线程安全的List,看完再也不怕了
- 2024-11-02 Java List集合遍历数据的八种方式
- 2024-11-02 Java代码更高效地遍历List(java怎么遍历list)
- 2024-11-02 java集合框架(List集合的特有功能概述和测试)
- 2024-11-02 Java中List 和 Map、Set 的区别(java中list,set,map的区别)
- 2024-11-02 java集合List接口(java集合linkedlist)
- 2024-11-02 Java 17 List 接口详解(java list 排序)
你 发表评论:
欢迎- 07-15采用Oracle OSB总线进行服务注册和接入
- 07-15javaEE 新闻管理系统 oracle11+tomcat6
- 07-15从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 07-15如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 07-15【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 07-15【mykit-data】 数据库同步工具(数据库表同步工具)
- 07-15[Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- 07-15Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- 最近发表
-
- 采用Oracle OSB总线进行服务注册和接入
- javaEE 新闻管理系统 oracle11+tomcat6
- 从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 【mykit-data】 数据库同步工具(数据库表同步工具)
- [Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- Oracle数据库云服务系列新增前所未有的企业级功能
- 直播预告丨如何实现Oracle存储过程到java的一键转化
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)