第31天

2023/6/15

# 第31天

给你写一个Hello World,因为你就是我的整个世界!

认识一个 存储数据 的结构,不同叫法。

# Java 数据结构

Java 数据结构是指 Java 编程语言中用于存储和组织数据的一组类和接口。这些数据结构提供了高效的数据访问和操作方法,是构建复杂应用程序的基础。Java 提供了多种内置的数据结构,包括数组、集合、映射、队列和栈等。下面是一些常见的数据结构及其用途:

  1. 数组(Array)

    • 用途:用于存储固定大小的同类型元素。
    • 实现原理:数组在内存中连续存储元素,通过索引访问元素。
    • 注意事项:数组大小固定,一旦创建就不能改变;访问速度较快,但插入和删除元素较慢。
  2. 集合(Collection)

    • 用途:用于存储一组不重复的元素。
    • 实现原理:集合接口定义了一组通用的方法,如添加、删除、查找元素等。
    • 常见实现类ArrayListLinkedListHashSetTreeSetHashMapTreeMap等。
    • 注意事项:集合可以动态调整大小,但访问速度可能不如数组。
  3. 映射(Map)

    • 用途:用于存储键值对,键是唯一的,值可以是任意对象。
    • 实现原理:映射接口定义了一组方法,用于操作键值对。
    • 常见实现类HashMapTreeMapLinkedHashMap等。
    • 注意事项:映射提供了快速查找、插入和删除键值对的方法。
  4. 队列(Queue)

    • 用途:用于存储一组有序的元素,遵循先进先出(FIFO)的原则。
    • 实现原理:队列接口定义了一组方法,如添加、删除、获取队首元素等。
    • 常见实现类LinkedListPriorityQueue等。
    • 注意事项:队列通常用于实现生产者-消费者模式。
  5. 栈(Stack)

    • 用途:用于存储一组有序的元素,遵循后进先出(LIFO)的原则。
    • 实现原理:栈接口定义了一组方法,如压栈、出栈、获取栈顶元素等。
    • 常见实现类LinkedListArrayDeque等。
    • 注意事项:栈通常用于实现递归算法。

在 Java 中,数据结构通常通过类和接口来表示。例如,ArrayListList 接口的一个实现类,提供了动态数组的功能。使用数据结构时,需要注意以下几点:

  • 选择合适的数据结构:根据应用场景选择最合适的数据结构,以提高程序的性能和效率。
  • 处理异常情况:在使用数据结构时,需要处理可能出现的异常情况,如空指针异常、索引越界异常等。
  • 线程安全:如果多个线程同时访问和修改数据结构,需要考虑线程安全问题,可以使用同步机制或选择线程安全的实现类。

合理使用数据结构可以大大提高程序的性能和可维护性。

整理:

ArrayListLinkedListHashSetTreeSetHashMapTreeMap

HashMapTreeMapLinkedHashMap

LinkedListPriorityQueue

LinkedListArrayDeque

# 数组(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 没有内建的图类。

一种数据结构。


这一篇的知识点都理解了吗?下一篇会更加精彩,不要错过哦~