第31天
# 第31天
给你写一个Hello World,因为你就是我的整个世界!
认识一个 存储数据 的结构,不同叫法。
# Java 数据结构
Java 数据结构是指 Java 编程语言中用于存储和组织数据的一组类和接口。这些数据结构提供了高效的数据访问和操作方法,是构建复杂应用程序的基础。Java 提供了多种内置的数据结构,包括数组、集合、映射、队列和栈等。下面是一些常见的数据结构及其用途:
数组(Array):
- 用途:用于存储固定大小的同类型元素。
- 实现原理:数组在内存中连续存储元素,通过索引访问元素。
- 注意事项:数组大小固定,一旦创建就不能改变;访问速度较快,但插入和删除元素较慢。
集合(Collection):
- 用途:用于存储一组不重复的元素。
- 实现原理:集合接口定义了一组通用的方法,如添加、删除、查找元素等。
- 常见实现类:
ArrayList
、LinkedList
、HashSet
、TreeSet
、HashMap
、TreeMap
等。 - 注意事项:集合可以动态调整大小,但访问速度可能不如数组。
映射(Map):
- 用途:用于存储键值对,键是唯一的,值可以是任意对象。
- 实现原理:映射接口定义了一组方法,用于操作键值对。
- 常见实现类:
HashMap
、TreeMap
、LinkedHashMap
等。 - 注意事项:映射提供了快速查找、插入和删除键值对的方法。
队列(Queue):
- 用途:用于存储一组有序的元素,遵循先进先出(FIFO)的原则。
- 实现原理:队列接口定义了一组方法,如添加、删除、获取队首元素等。
- 常见实现类:
LinkedList
、PriorityQueue
等。 - 注意事项:队列通常用于实现生产者-消费者模式。
栈(Stack):
- 用途:用于存储一组有序的元素,遵循后进先出(LIFO)的原则。
- 实现原理:栈接口定义了一组方法,如压栈、出栈、获取栈顶元素等。
- 常见实现类:
LinkedList
、ArrayDeque
等。 - 注意事项:栈通常用于实现递归算法。
在 Java 中,数据结构通常通过类和接口来表示。例如,ArrayList
是 List
接口的一个实现类,提供了动态数组的功能。使用数据结构时,需要注意以下几点:
- 选择合适的数据结构:根据应用场景选择最合适的数据结构,以提高程序的性能和效率。
- 处理异常情况:在使用数据结构时,需要处理可能出现的异常情况,如空指针异常、索引越界异常等。
- 线程安全:如果多个线程同时访问和修改数据结构,需要考虑线程安全问题,可以使用同步机制或选择线程安全的实现类。
合理使用数据结构可以大大提高程序的性能和可维护性。
整理:
ArrayList
、LinkedList
、HashSet
、TreeSet
、HashMap
、TreeMap
HashMap
、TreeMap
、LinkedHashMap
LinkedList
、PriorityQueue
LinkedList
、ArrayDeque
# 数组(Arrays)
特点: 固定大小,存储相同类型的元素。
优点: 随机访问元素效率高。
缺点: 大小固定,插入和删除元素相对较慢。
int[] array = new int[5];
# 列表(Lists)
List<String> arrayList = new ArrayList<>();
List<Integer> linkedList = new LinkedList<>();
# ArrayList:
特点: 动态数组,可变大小。
优点: 高效的随机访问和快速尾部插入。
缺点: 中间插入和删除相对较慢。
# LinkedList:
特点: 双向链表,元素之间通过指针连接。
优点: 插入和删除元素高效,迭代器性能好。
缺点: 随机访问相对较慢。
# 集合(Sets)
集合(Sets)用于存储不重复的元素,常见的实现有 HashSet 和 TreeSet。
Set<String> hashSet = new HashSet<>();
Set<Integer> treeSet = new TreeSet<>();
# HashSet:
特点: 无序集合,基于HashMap实现。
优点: 高效的查找和插入操作。
缺点: 不保证顺序。
# TreeSet:
特点:TreeSet 是有序集合,底层基于红黑树实现,不允许重复元素。
优点: 提供自动排序功能,适用于需要按顺序存储元素的场景。
缺点: 性能相对较差,不允许插入 null 元素。
# 映射(Maps)
映射(Maps)用于存储键值对,常见的实现有 HashMap 和 TreeMap。
Map<String, Integer> hashMap = new HashMap<>();
Map<String, Integer> treeMap = new TreeMap<>();
# HashMap:
特点: 基于哈希表实现的键值对存储结构。
优点: 高效的查找、插入和删除操作。
缺点: 无序,不保证顺序。
# TreeMap:
特点: 基于红黑树实现的有序键值对存储结构。
优点: 有序,支持按照键的顺序遍历。
缺点: 插入和删除相对较慢。
# 栈(Stack)
栈(Stack)是一种线性数据结构,它按照后进先出(Last In, First Out,LIFO)的原则管理元素。在栈中,新元素被添加到栈的顶部,而只能从栈的顶部移除元素。这就意味着最后添加的元素是第一个被移除的。
Stack<Integer> stack = new Stack<>();
# Stack 类:
特点: 代表一个栈,通常按照后进先出(LIFO)的顺序操作元素。
# 队列(Queue)
队列(Queue)遵循先进先出(FIFO)原则,常见的实现有 LinkedList 和 PriorityQueue。
Queue<String> queue = new LinkedList<>();
Queue 接口:
特点: 代表一个队列,通常按照先进先出(FIFO)的顺序操作元素。
实现类: LinkedList, PriorityQueue, ArrayDeque。
# 堆(Heap)
堆(Heap)优先队列的基础,可以实现最大堆和最小堆。
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
# 树(Trees)
Java 提供了 TreeNode 类型,可以用于构建二叉树等数据结构。
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
# 图(Graphs)
图的表示通常需要自定义数据结构或使用图库,Java 没有内建的图类。
一种数据结构。
这一篇的知识点都理解了吗?下一篇会更加精彩,不要错过哦~