Java 数据结构


Java是一种面向对象的编程语言,它支持多种数据结构。良好的数据结构设计可以帮助我们更好地组织和管理数据,提高代码的效率和可读性。

在Java中,数据结构可以分为两类:基本数据结构和高级数据结构。基本数据结构包括数组、链表、栈、队列和哈希表,这些数据结构都是Java语言本身提供的。高级数据结构包括树、图、堆等,需要通过Java中的类库来实现。

基本数据结构:

数组

数组是一种最常用的数据结构之一,Java语言支持的数组包括一维数组和多维数组。在Java中创建数组需要指定数组类型和数组大小,例如:

int[] arr = new int[10]; //创建一个长度为10的int类型数组

链表

链表是一种常用的数据结构,Java中的链表有单向链表和双向链表两种。链表的每个元素都有一个指向下一个元素的指针(对于双向链表还有一个指向上一个元素的指针)。在Java中创建链表需要定义一个节点类,其中包含节点的值和指向下一个节点的指针,例如:

class ListNode { int val; ListNode next; ListNode(int x) { val = x; } }

栈是一种先进后出(LIFO)的数据结构,Java中的栈可以通过Stack类来实现。栈中包含push()和pop()两个操作,分别用于将元素插入栈的顶部和把栈顶元素弹出,例如:

Stack stack=new Stack(); stack.push(1); //压入1 stack.push(2); //压入2 int a=stack.pop(); //取出栈顶元素2 int b=stack.pop(); //取出栈顶元素1

队列

队列是一种先进先出(FIFO)的数据结构,Java中的队列可以通过Queue接口来实现。队列中包含offer()和poll()两个操作,分别用于将元素插入队尾和取出队头元素,例如:

Queue queue=new LinkedList(); queue.offer(1); //入队1 queue.offer(2); //入队2 int a=queue.poll(); //取出头元素1 int b=queue.poll(); //取出头元素2

哈希表

哈希表是一种用于存储键值对的数据结构,Java中的哈希表可以通过HashMap类来实现。哈希表的查找和插入速度非常快,因为它采用了哈希函数来计算每个键在数组中的位置。例如:

HashMap<String,Integer> map=new HashMap<String,Integer>(); map.put(“apple”,1); //插入键值对(“apple”,1) int a=map.get(“apple”); //查找键"apple"对应的值1

高级数据结构:

树是一种非常常用的数据结构,Java中的树可以通过TreeNode类来实现。树中每个节点都有一个值和若干个子节点,其中根节点没有父节点,叶子节点没有子节点。常见的树结构包括二叉树、二叉搜索树、红黑树等,例如:

class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }

图是一种包含节点和边的数据结构,Java中的图可以通过Graph类来实现。图中的每个节点可以与其他节点相连,相连的边可以有不同的权重。常见的图结构包括有向图、无向图、加权图等,例如:

class Graph { int V; //图的顶点数 LinkedList adj[]; //用邻接表存储边 Graph(int v) { V = v; adj = new LinkedList[v]; for (int i=0; i<v; ++i) adj[i] = new LinkedList(); } void addEdge(int v,int w) { adj[v].add(w); } //添加边 }

堆是一种特殊的树形数据结构,它的每个节点都满足父节点比子节点大(或小)的条件。Java中的堆可以通过PriorityQueue类来实现,它是基于堆的一种优先队列。堆中包含insert()和deleteMin()两个操作,分别用于插入元素和删除最小元素,例如:

PriorityQueue heap=new PriorityQueue(); heap.offer(2); //插入 heap.offer(1); int a=heap.poll(); //删除最小元素1 int b=heap.poll(); //删除最小元素2