当前位置:   article > 正文

Java学习:Java中的常见数据结构以及其示例代码

Java学习:Java中的常见数据结构以及其示例代码

Java编程中,了解和掌握常见的数据结构是至关重要的。以下是几种常见的数据结构及其简单的示例代码:

  • 数组(Array):一种线性数据结构,用于存储相同类型的元素,可以通过索引来访问和修改元素。
  1. int[] numbers = new int[5]; // 创建一个长度为5的整型数组
  2. numbers[0] = 1; // 设置第一个元素的值为1
  3. int element = numbers[2]; // 获取第三个元素的值
  4. System.out.println(element); // 输出结果:0(默认值,因为没有赋值)
  • 链表(Linked List):由节点组成的线性数据结构,每个节点包含数据和指向下一个节点的引用。
  1. class ListNode {
  2. int value;
  3. ListNode next;
  4. ListNode(int value) {
  5. this.value = value;
  6. this.next = null;
  7. }
  8. }
  9. // 创建链表
  10. ListNode head = new ListNode(1);
  11. ListNode node2 = new ListNode(2);
  12. ListNode node3 = new ListNode(3);
  13. head.next = node2;
  14. node2.next = node3;
  15. // 遍历链表
  16. ListNode current = head;
  17. while (current != null) {
  18. System.out.println(current.value);
  19. current = current.next;
  20. }
  • 栈(Stack):一种后进先出(LIFO)的数据结构,只能在栈顶进行插入和删除操作。
  1. import java.util.Stack;
  2. Stack<Integer> stack = new Stack<>();
  3. stack.push(1); // 添加元素到栈顶
  4. stack.push(2);
  5. stack.push(3);
  6. int topElement = stack.peek(); // 获取栈顶元素(不移除)
  7. System.out.println(topElement); // 输出结果:3
  8. int poppedElement = stack.pop(); // 弹出栈顶元素
  9. System.out.println(poppedElement); // 输出结果:3
  • 队列(Queue):一种先进先出(FIFO)的数据结构,可以在队尾插入元素,在队头删除元素。
  1. import java.util.LinkedList;
  2. import java.util.Queue;
  3. Queue<Integer> queue = new LinkedList<>();
  4. queue.offer(1); // 添加元素到队尾
  5. queue.offer(2);
  6. queue.offer(3);
  7. int frontElement = queue.peek(); // 获取队头元素(不移除)
  8. System.out.println(frontElement); // 输出结果:1
  9. int dequeuedElement = queue.poll(); // 出队队头元素
  10. System.out.println(dequeuedElement); // 输出结果:1
  • 哈希表(HashMap):使用键-值对存储数据的结构,通过哈希函数将键映射到一个索引,可以快速访问和修改数据。
  1. import java.util.HashMap;
  2. HashMap<String, Integer> hashMap = new HashMap<>();
  3. hashMap.put("apple", 1);
  4. hashMap.put("banana", 2);
  5. hashMap.put("orange", 3);
  6. int value = hashMap.get("banana"); // 通过键获取值
  7. System.out.println(value); // 输出结果:2
  8. boolean containsKey = hashMap.containsKey("apple"); // 检查是否包含某个键
  9. System.out.println(containsKey); // 输出结果:true
  10. hashMap.remove("orange"); // 移除指定键的键值对
  11. for (String key : hashMap.keySet()) {
  12. int val = hashMap.get(key);
  13. System.out.println(key + ": " + val);
  14. }
  • 集合(Set):一种不允许重复元素的数据结构,常见的实现类有HashSetTreeSet
  1. import java.util.HashSet;
  2. HashSet<Integer> set = new HashSet<>();
  3. set.add(1);
  4. set.add(2);
  5. set.add(3);
  6. boolean contains = set.contains(2); // 检查是否包含某个元素
  7. System.out.println(contains); // 输出结果:true
  8. set.remove(3); // 移除指定元素
  9. for (Integer num : set) {
  10. System.out.println(num);
  11. }
  • 树(Tree):一种非线性数据结构,由节点和边组成,每个节点可以有多个子节点,常见的实现有二叉树、AVL树等。
  1. class TreeNode {
  2. int val;
  3. TreeNode left;
  4. TreeNode right;
  5. public TreeNode(int val) {
  6. this.val = val;
  7. this.left = null;
  8. this.right = null;
  9. }
  10. }
  11. class BinarySearchTree {
  12. private TreeNode root;
  13. public void insert(int val) {
  14. root = insertNode(root, val);
  15. }
  16. private TreeNode insertNode(TreeNode node, int val) {
  17. if (node == null) {
  18. return new TreeNode(val);
  19. }
  20. if (val < node.val) {
  21. node.left = insertNode(node.left, val);
  22. } else if (val > node.val) {
  23. node.right = insertNode(node.right, val);
  24. }
  25. return node;
  26. }
  27. public boolean search(int val) {
  28. return searchNode(root, val);
  29. }
  30. private boolean searchNode(TreeNode node, int val) {
  31. if (node == null) {
  32. return false;
  33. }
  34. if (val == node.val) {
  35. return true;
  36. } else if (val < node.val) {
  37. return searchNode(node.left, val);
  38. } else {
  39. return searchNode(node.right, val);
  40. }
  41. }
  42. }
  43. BinarySearchTree bst = new BinarySearchTree();
  44. bst.insert(5);
  45. bst.insert(2);
  46. bst.insert(8);
  47. bst.insert(1);
  48. System.out.println(bst.search(2)); // 输出结果:true
  49. System.out.println(bst.search(10)); // 输出结果:false
  • 图(Graph):由节点和边组成的非线性数据结构,节点之间可以有多个连接关系。
  1. import java.util.ArrayList;
  2. import java.util.LinkedList;
  3. import java.util.List;
  4. import java.util.Queue;
  5. class Graph {
  6. private int vertices; // 顶点数
  7. private List<List<Integer>> adjacencyList; // 邻接表表示图
  8. public Graph(int vertices) {
  9. this.vertices = vertices;
  10. adjacencyList = new ArrayList<>(vertices);
  11. for (int i = 0; i < vertices; i++) {
  12. adjacencyList.add(new ArrayList<>());
  13. }
  14. }
  15. public void addEdge(int source, int destination) {
  16. adjacencyList.get(source).add(destination);
  17. adjacencyList.get(destination).add(source);
  18. }
  19. public void breadthFirstSearch(int startVertex) {
  20. boolean[] visited = new boolean[vertices];
  21. Queue<Integer> queue = new LinkedList<>();
  22. visited[startVertex] = true;
  23. queue.offer(startVertex);
  24. while (!queue.isEmpty()) {
  25. int currentVertex = queue.poll();
  26. System.out.print(currentVertex + " ");
  27. List<Integer> neighbors = adjacencyList.get(currentVertex);
  28. for (int neighbor : neighbors) {
  29. if (!visited[neighbor]) {
  30. visited[neighbor] = true;
  31. queue.offer(neighbor);
  32. }
  33. }
  34. }
  35. }
  36. }
  37. Graph graph = new Graph(6);
  38. graph.addEdge(0, 1);
  39. graph.addEdge(0, 2);
  40. graph.addEdge(1, 3);
  41. graph.addEdge(2, 4);
  42. graph.addEdge(3, 5);
  43. graph.breadthFirstSearch(0); // 从顶点0开始广度优先搜索
  • 堆(Heap):一种特殊的树形数据结构,用于高效地找到最大或最小值。
  1. import java.util.PriorityQueue;
  2. PriorityQueue<Integer> minHeap = new PriorityQueue<>(); // 创建一个最小堆
  3. minHeap.offer(5); // 添加元素
  4. minHeap.offer(2);
  5. minHeap.offer(8);
  6. minHeap.offer(1);
  7. int minElement = minHeap.peek(); // 获取堆顶元素(最小值)
  8. System.out.println(minElement); // 输出结果:1
  9. while (!minHeap.isEmpty()) {
  10. int currentElement = minHeap.poll(); // 弹出并移除堆顶元素
  11. System.out.println(currentElement);
  12. }
  • 列表(List):一种有序的数据结构,允许重复元素,常见的实现类有ArrayListLinkedList
  1. import java.util.ArrayList;
  2. ArrayList<Integer> myList = new ArrayList<>();
  3. myList.add(1); // 添加元素
  4. myList.add(2);
  5. myList.add(3);
  6. System.out.println(myList); // 输出结果:[1, 2, 3]
  7. myList.remove(1); // 移除指定索引位置的元素
  8. System.out.println(myList); // 输出结果:[1, 3]
  9. int element = myList.get(0); // 获取指定索引位置的元素
  10. System.out.println(element); // 输出结果:1
  11. for (int i = 0; i < myList.size(); i++) { // 遍历列表中的元素
  12. System.out.println(myList.get(i));
  13. }

这些示例代码展示了如何使用Java中的一些常见数据结构。你可以根据具体需求进行修改和扩展,以适应不同的应用场景。了解和熟练使用这些数据结构,将帮助你编写出更高效、可维护的代码。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/715953
推荐阅读
相关标签
  

闽ICP备14008679号