在软件开发领域,熟悉并掌握数据结构对于提升程序性能和优化算法至关重要。本文将全面介绍Java中常用的核心数据结构,辅以示例代码和概念图解,以帮助读者更好地理解和应用这些数据结构。
1. 数组(Array)
数组是Java中最基础的数据结构之一,它是在内存中一块连续区域存放相同类型元素的集合。数组支持通过索引访问元素,时间复杂度为O(1)。
int[] numbers = new int[5];
numbers[0] = 1; // 使用索引访问和修改元素
2. 链表(LinkedList)
链表是由一系列节点构成的,每个节点包含数据和指向下一个节点的引用。链表分为单向链表和双向链表,Java的LinkedList类实现了双向链表。
单项链表
双向链表
3. 栈(Stack)
栈是一种遵循后进先出(LIFO)原则的数据结构,Java通过java.util.Stack类实现栈功能。
Stack<String> stack = new Stack<>();
stack.push("Hello"); // 元素入栈
stack.pop(); // 弹出栈顶元素
4. 队列(Queue)
队列遵循先进先出(FIFO)原则,Java提供了java.util.Queue接口以及LinkedList和PriorityQueue等实现。
Queue<String> queue = new LinkedList<>();
queue.offer("World"); // 元素入队
queue.poll(); // 出队并移除队头元素
5. 集合(Set)
Set是一种不允许存在重复元素的集合,常见的Java实现有无序的HashSet和有序的TreeSet。
Set<String> set = new HashSet<>();
set.add("Java"); // 添加元素,自动去重
6. 映射(Map)
Map是一种键值对的数据结构,Java的HashMap和TreeMap分别基于哈希表和红黑树实现。
Map<String, Integer> map = new HashMap<>();
map.put("Language", 1); // 添加键值对
7. 树形结构(Tree)
Java中的树形结构,包括二叉树、二叉搜索树、平衡二叉树(如红黑树)、线段树、区间树以及前缀树(Trie)。虽然Java标准库并未直接提供所有树结构,但通过自定义类实现,并提及TreeMap和TreeSet内部采用红黑树实现。
二叉树
红黑树
红黑树是一种自平衡二叉树
红黑树要素:
- 每个节点要么是黑色,要么是红色
- 根节点都是黑色
- 每个叶子节点都是黑色
- 每个红色节点的两个子节点一定是黑色
- 任意一节点到每个叶子节点的路径中都包含相同的黑色节点
旋转原理:
1.左旋:以某个节点作为支点,将其右子节旋转为父节点,右子节点的左子节点转换为右节点,左子节点保持不变
2.右旋:以某个节点作为支点,将其左子节点旋转为父节点,左子节点的右子节点旋转为左子节点,右子节点保持不变
3.变色:节点的颜色