JAVA数据结构
一、数组(Arrays)
可以存储固定大小的相同类型的元素。
int[] array = new int[5];
- 优点:随机访问元素效率高
- 缺点:大小固定,插入和删除元素相对较慢
二、列表(Lists)
1、ArrayList
List<String> arrayList = new ArrayList<>();
- 特点:动态数组,可变大小
- 优点:高效的随机访问和快速尾部插入
- 缺点:中间插入和删除相对较慢
2、LinkedList
List<Integer> linkedList = new LinkedList<>();
- 特点:双向链表,元素之间通过指针连接。
- 优点:插入和删除元素高效,迭代器性能好
- 缺点:随机访问相对较慢
三、集合(Sets)
用于存储不重复的元素,常见的实现有HashSet和TreeSet
1、HashSet
Set<String> hashSet = new HashSet<>();
- 特点:无序集合,基于HashMap实现
- 优点:高效的查找和插入操作
- 缺点:不保证顺序
2、TreeSet
Set<Integer> treeSet = new TreeSet<>();
- 特点:有序集合,底层基于红黑树实现,不允许重复元素
- 优点:提供自动排序功能,适用于需要按顺序存储元素的场景
- 缺点:性能相对较差,不允许插入Null元素
四、映射(Maps)
用于存储键值对,常见的实现有HashMap和TreeMap
1、HashMap
Map<String, Integer> hashMap = new HashMap<>();
- 特点:基于哈希表实现的键值对存储结构
- 优点:高效的查找、插入和删除操作
- 缺点:无序,不保证顺序
2、TreeMap
Map<String, Integer> treeMap = new TreeMap<>();
- 特点:基于红黑树实现的有序键值对存储结构
- 优点:有序,支持按照键的顺序遍历
- 缺点:插入和删除相对较慢
五、栈(Stack)
栈(Stack)是一种线性数据结构,它按照后进先出(Last In, First Out,LIFO)的原则管理元素。在栈中,新元素被添加到栈的顶部,而只能从栈的顶部移除元素。这就意味着最后添加的元素是第一个被移除的。
Stack<Integer> stack = new Stack<>();
- Stack类代表一个栈,通常按照后进先出(LIFO)的顺序操作元素。
六、队列(Queue)
1、先进先出(FIFO)原则,常见的实现有LinkedList和PriorityQueue
Queue<String> queue = new LinkedList<>();
2、Queue接口:代表一个队列,先进先出原则,实现类LinkedList, PriorityQueue, ArrayDeque
七、堆(Heap)
堆(Heap)优先队列的基础,可以实现最大堆和最小堆
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
八、树(Tree)
树是一种线性结构,由节点组成的集合
1、二叉树:每一个节点最多有两个子树
2、完全二叉树:除了最外层节点,其他的节点都达到最大的层数
- 判断是否是完全二叉树:叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树
3、满二叉树:一个树的节点要么是叶子节点,要么就是有两个节点
4、平衡二叉树:任何节点的子树高度差不超过1
5、二叉查找树:任意节点的左子树都不能为空,并且左子树所有节点的值都小于根节点;任意节点的右子树不能为空,并且右子树所有节点的值都大于根节点;任意节点的左右子树都是一个二叉查找树。
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
九、图(Graphs)
图的表示通常需要自定义数据结构或使用图库,Java 没有内建的图类。
标签:JAVA,元素,PriorityQueue,插入,二叉树,new,数据结构,节点 From: https://www.cnblogs.com/shihongpin/p/18362635