一维数组:一维数组是最常见的数组类型,它包含一系列具有相同数据类型的元素。数组中的每个元素可以通过索引访问,索引从0开始。
二维数组:二维数组是由一维数组组成的数组。它可以被看作是一个表格或者矩阵,其中的元素可以通过两个索引进行访问。每个元素都是由行索引和列索引确定的。
多维数组:多维数组是由一维或二维数组组成的数组。例如,三维数组由一系列二维数组组成,四维数组由一系列三维数组组成,以此类推。
此外,还有两种特殊类型的数组:
动态数组(ArrayList):动态数组是一种可以自动调整大小的数组,它可以根据需要动态添加或删除元素。
不规则数组:不规则数组是指每个一维数组的长度可以不同的二维数组。不规则数组在某些情况下可以提供更灵活的数据存储和处理方式。
在声明数组时,需要指定数组的类型和大小。初始化数组有两种方法:静态初始化和动态初始化。
静态初始化:静态初始化是在声明数组时直接为数组元素赋予初始值。语法如下:
数据类型[] 数组名 = {元素1, 元素2, ...};
例如,可以通过以下方式静态初始化一个整型数组:
int[] numbers = {1, 2, 3, 4, 5};
静态初始化可以在声明数组时一次性完成,非常方便。
动态初始化:动态初始化是在声明数组时只指定数组的类型和大小,并没有为数组元素赋初值。语法如下:
数据类型[] 数组名 = new 数据类型[数组大小];
例如,可以通过以下方式动态初始化一个整型数组:
int[] numbers = new int[5];
动态初始化后,数组的每个元素的初始值将根据数据类型的默认值进行赋值,如int类型默认为0。
需要注意的是,一旦数组被初始化,其大小就无法再更改。如果需要动态调整数组的大小,可以考虑使用动态数组(ArrayList)来代替。
一维数组:
二维数组:
多维数组:
动态数组(ArrayList):
在Java中,二维数组实际上是由一维数组组成的数组。因此,二维数组的边长度就是它包含的一维数组的数量。
下面是一个示例代码:
public class Main {
public static void main(String[] args) {
int[][] twoDimensionalArray = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int rows = twoDimensionalArray.length; // 获取二维数组的行数
int columns = twoDimensionalArray[0].length; // 获取二维数组的列数
System.out.println("二维数组的行数:" + rows);
System.out.println("二维数组的列数:" + columns);
}
}
在这个示例中,我们创建了一个二维数组twoDimensionalArray,并初始化了3行3列的数组。通过使用length属性,我们可以获取二维数组的行数和列数。在这个示例中,我们分别使用twoDimensionalArray.length获取行数,使用twoDimensionalArray[0].length获取列数。最后,我们将行数和列数打印出来。
- 需要注意的是,如果二维数组是不规则的,也就是说每一行的列数不相等,那么获取边长度的方法会有所不同。在这种情况下,你需要遍历每一行,获取每一行的长度,然后找出最大的长度作为边长度。
示例代码:
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack.pop()); // 输出3
System.out.println(stack.peek()); // 输出2
我们可以遍历字符串,当遇到左括号时,将其压入栈中;当遇到右括号时,检查栈顶元素是否为对应的左括号,如果是,则弹出栈顶元素,继续遍历;如果不是,则说明括号不匹配,返回false。最后检查栈是否为空,如果为空,则说明所有括号都匹配,返回true。
public static boolean isParenthesesMatch(String str) {
Stack<Character> stack = new Stack<>();
for (char c : str.toCharArray()) {
if (c == '(' || c == '[' || c == '{') {
stack.push(c);
} else if (c == ')' || c == ']' || c == '}') {
if (stack.isEmpty()) {
return false;
}
char top = stack.peek();
if ((c == ')' && top == '(') || (c == ']' && top == '[') || (c == '}' && top == '{')) {
stack.pop();
} else {
return false;
}
}
}
return stack.isEmpty();
}
示例代码:
Queue<Integer> queue = new LinkedList<>();
queue.offer(1);
queue.offer(2);
queue.offer(3);
System.out.println(queue.poll()); // 输出1
System.out.println(queue.peek()); // 输出2
import java.util.LinkedList;
import java.util.Queue;
// 定义二叉树节点
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
public class LevelOrderTraversal {
public static void levelOrder(TreeNode root) {
if (root == null) {
return;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
System.out.print(node.val + " ");
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
}
}
public static void main(String[] args) {
// 创建二叉树
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
root.right.left = new TreeNode(6);
root.right.right = new TreeNode(7);
// 层次遍历二叉树
System.out.print("层次遍历结果:");
levelOrder(root);
}
}
运行以上代码,输出结果为:1 2 3 4 5 6 7,表示对二叉树进行层次遍历的结果。