java算法编程基础知识

数组

Java 中数组是一种存储固定数量元素的数据结构,它具有以下特点:

  1. 数组长度是固定的,一旦创建,长度就不能再改变。

  1. 数组可以存储任意类型的数据,包括基本类型和对象类型。

  1. 数组中的元素是有序的,可以通过下标访问。

Java 中提供了一系列方法来处理数组,包括以下常用方法:

1、创建数组

Java 中使用关键字 new 来创建数组,语法如下:

数据类型[] 数组名=new数据类型[数组长度];

例如,创建一个包含 5 个整数的数组:

int[] arr=newint[5];
1.1 初始化数组

Java 中有两种初始化数组的方法:静态初始化和动态初始化。

静态初始化是指在声明数组时就给数组赋初值,语法如下:

数据类型[] 数组名= {元素1, 元素2, ..., 元素n};

例如,创建一个包含 3 个整数的数组,并给数组赋初值:

int[] arr= {1, 2, 3};

动态初始化是指先声明数组,然后再给数组元素赋值,语法如下:

数据类型[] 数组名=new数据类型[数组长度];

数组名[下标] =元素值;

例如,创建一个包含 3 个整数的数组,并给数组赋值:

int[] arr=newint[3];
arr[0] =1;
arr[1] =2;
arr[2] =3;
2、访问数组元素

Java 中通过下标来访问数组元素,下标从 0 开始,语法如下:

数组名[下标]

例如,访问数组 arr 的第二个元素:

intx=arr[1];
2.1 遍历数组

Java 中可以使用循环语句遍历数组,常用的有 for 循环和 foreach 循环。

for 循环遍历数组,语法如下:

for (inti=0; i<数组长度; i++) {
    // 循环体
}

例如,遍历数组 arr 并打印每个元素:

for (inti=0; i<arr.length; i++) {
    System.out.println(arr[i]);
}

foreach 循环遍历数组,语法如下:

for (数据类型变量名 : 数组名) {
    // 循环体
}

例如,使用 foreach 循环遍历数组 arr 并打印每个元素:

for (intx : arr) {
    System.out.println(x);
}
3、数组排序

Java 中可以使用 Arrays 类的 sort() 方法对数组进行排序,语法如下:

Arrays.sort(数组名);

例如,对数组 arr 进行升序排序:

Arrays.sort(arr);
4、数组复制

Java 中可以使用 Arrays 类的 copyOf() 和 copyOfRange() 方法复制数组。

copyOf() 方法用于复制整个数组,语法如下:

数据类型[] 新数组名=Arrays.copyOf(原数组名, 新数组长度);

例如,复制数组 arr 并将结果存储到新数组 newArr 中:

int[] newArr=Arrays.copyOf(arr, arr.length);

copyOfRange() 方法用于复制数组的一部分,语法如下:

数据类型[] 新数组名=Arrays.copyOfRange(原数组名, 起始下标, 终止下标);

例如,复制数组 arr 的第二个到第四个元素,并将结果存储到新数组 newArr 中:

int[] newArr=Arrays.copyOfRange(arr, 1, 4);
5、数组转换为字符串

Java 中可以使用 Arrays 类的 toString() 方法将数组转换为字符串,语法如下:

String字符串名=Arrays.toString(数组名);

例如,将数组 arr 转换为字符串并打印出来:

System.out.println(Arrays.toString(arr));

以上就是 Java 中常用的数组方法。除此之外,Java 还提供了一些其他的数组方法,例如 binarySearch()、fill()、equals() 等。如果需要更深入地了解数组方法,请参考 Java 文档。

字符串

1、字符串长度

Java 中可以使用 length() 方法获取字符串的长度,语法如下:

int长度=字符串名.length();

例如,获取字符串 str 的长度并打印出来:

intlen=str.length();
System.out.println(len);
2、字符串连接

Java 中可以使用 + 运算符或 concat() 方法将字符串连接起来,语法如下:

String字符串名=字符串1+字符串2;
String字符串名=字符串1.concat(字符串2);

例如,将字符串 str1 和 str2 连接起来,并将结果存储到新的字符串 str 中:

Stringstr=str1+str2;
Stringstr=str1.concat(str2);
3、字符串截取

Java 中可以使用 substring() 方法截取字符串的一部分,语法如下:

String子串=字符串名.substring(起始下标);

String子串=字符串名.substring(起始下标, 终止下标);

例如,从字符串 str 的第三个字符开始截取到末尾:

Stringsub=str.substring(2);

或者从字符串 str 的第三个字符开始截取到第七个字符:

Stringsub=str.substring(2, 6);

需要注意的是,起始下标从 0 开始计数,而终止下标不包括在截取的子串中。

4、字符串查找

Java 中可以使用 indexOf() 方法查找字符串中第一次出现某个子串的位置,语法如下:

int位置=字符串名.indexOf(子串);

例如,查找字符串 str 中第一次出现子串 "hello" 的位置:

intpos=str.indexOf("hello");

如果查找失败,indexOf() 方法返回 -1。

5、字符串替换

Java 中可以使用 replace() 方法将字符串中的某个子串替换成另一个字符串,语法如下:

String新字符串=字符串名.replace(旧子串, 新子串);

例如,将字符串 str 中的子串 "hello" 替换为 "hi":

StringnewStr=str.replace("hello", "hi");
6、字符串分割

Java 中可以使用 split() 方法将字符串按照某个分隔符分割成字符串数组,语法如下:

String[] 字符串数组名=字符串名.split(分隔符);

例如,将字符串 str 按照空格分割成字符串数组 arr:

String[] arr=str.split(" ");
7、字符串转换为字符数组

Java 中可以使用 toCharArray() 方法将字符串转换为字符数组,语法如下:

char[] 字符数组名=字符串名.toCharArray();

例如,将字符串 str 转换为字符数组 charArr:

8、字符串大小写转换

Java 中可以使用 toUpperCase() 方法将字符串转换为大写形式,也可以使用 toLowerCase() 方法将字符串转换为小写形式,语法如下:

String大写字符串名=字符串名.toUpperCase();
String小写字符串名=字符串名.toLowerCase();

例如,将字符串 str 转换为大写形式和小写形式:

StringupperStr=str.toUpperCase();
StringlowerStr=str.toLowerCase();
9、字符串去除空格

Java 中可以使用 trim() 方法去除字符串两端的空格,语法如下:

String 新字符串名 = 字符串名.trim();

例如,去除字符串 str 两端的空格:

StringnewStr=str.trim();
10、字符串比较

Java 中可以使用 equals() 方法比较两个字符串是否相等,语法如下:

boolean是否相等=字符串1.equals(字符串2);

例如,比较字符串 str1 和 str2 是否相等:

booleanisEqual=str1.equals(str2);

需要注意的是,字符串比较时要使用 equals() 方法,而不能使用 == 运算符,因为 == 运算符比较的是两个字符串的引用地址是否相等,而不是字符串的内容是否相等。

11、字符串格式化

Java 中可以使用 format() 方法按照指定格式将数据格式化成字符串,语法如下:

String格式化字符串名=String.format(格式, 数据1, 数据2, ...);

例如,将整数 num 格式化为八进制字符串:

StringoctStr=String.format("%o", num);

需要注意的是,格式化字符串中的 % 符号代表占位符,后面的字母表示数据类型,例如 %d 表示整数,%f 表示浮点数,%s 表示字符串。

栈,队列,树,哈希,集合

1、栈

Java 中的栈可以使用 Stack 类或 Deque 接口的实现类 LinkedList 来创建。

创建 Stack 对象:

Stack<Integer>stack=newStack<>();

创建 LinkedList 对象作为栈:

LinkedList<Integer>stack=newLinkedList<>();

栈的常用方法:

  • push(item):将元素压入栈顶。

  • pop():将栈顶元素弹出并返回。

  • peek():返回栈顶元素但不弹出。

  • empty():判断栈是否为空。

  • search(item):返回元素在栈中的位置,从栈顶开始计数。

示例:

Stack<Integer>stack=newStack<>();
stack.push(1);
stack.push(2);
stack.push(3);
inttop=stack.peek();  // 返回 3
intpopItem=stack.pop();  // 将 3 弹出栈顶
booleanisEmpty=stack.empty();  // 返回 false
intindex=stack.search(2);  // 返回元素 2 在栈中的位置,从栈顶开始计数
2、队列

Java 中的队列可以使用 Queue 接口的实现类 LinkedList 来创建。

创建 LinkedList 对象作为队列:

LinkedList<Integer>queue=newLinkedList<>();

队列的常用方法:

  • add(item):将元素添加到队列末尾。

  • remove():从队列头部移除并返回元素。

  • peek():返回队列头部元素但不移除。

  • offer(item):将元素添加到队列末尾,如果添加失败则返回 false。

  • poll():从队列头部移除并返回元素,如果队列为空则返回 null。

  • element():返回队列头部元素但不移除,如果队列为空则抛出 NoSuchElementException 异常。

示例:

Queue<Integer>queue=newLinkedList<>();
queue.add(1);
queue.add(2);
queue.add(3);
inthead=queue.peek();  // 返回 1
intremoveItem=queue.remove();  // 将 1 移除队列头部
booleanofferResult=queue.offer(4);  // 将 4 添加到队列末尾
intpollItem=queue.poll();  // 将 2 移除队列头部并返回
3、树

Java 中的树可以使用 TreeNode 类来创建。TreeNode 类包含一个值和两个 TreeNode 类型的子节点。

创建 TreeNode 对象:

classTreeNode {
    intval;
    TreeNodeleft;
    TreeNoderight;
    TreeNode(intx) { val=x; }
}

树的遍历可以分为前序遍历、中序遍历和后序遍历。其中,前序遍历的遍历顺序为根节点、左子树、右子树;中序遍历的遍历顺序为左子树、根节点、右子树;后序遍历的遍历顺序为左子树、右子树、根节点。

遍历根节点

preorderTraversal(root.left); // 遍历左子树 preorderTraversal(root.right); // 遍历右子树 
遍历根节点 preorderTraversal(root.left); // 遍历左子树 preorderTraversal(root.right); // 遍历右子树 } }
voidinorderTraversal(TreeNoderoot) {
    if (root!=null) {
        inorderTraversal(root.left);  // 遍历左子树
        // 遍历根节点
        inorderTraversal(root.right);  // 遍历右子树
    }
}
​
publicvoidpostorderTraversal(TreeNoderoot) {
    if (root!=null) {
        postorderTraversal(root.left);  // 遍历左子树
        postorderTraversal(root.right);  // 遍历右子树
        // 遍历根节点
    }
}
}
4、哈希表

Java 中的哈希表可以使用 HashMap 类来创建。

创建 HashMap 对象:

HashMap<Integer, String>hashMap=newHashMap<>();

哈希表的常用方法:

  • put(key, value):将键值对添加到哈希表中。

  • get(key):返回键对应的值。

  • remove(key):从哈希表中移除指定的键及其对应的值。

  • containsKey(key):判断哈希表中是否包含指定的键。

  • containsValue(value):判断哈希表中是否包含指定的值。

  • size():返回哈希表中键值对的数量。

示例:

HashMap<Integer, String>hashMap=newHashMap<>();
hashMap.put(1, "Hello");
hashMap.put(2, "World");
Stringvalue=hashMap.get(1);  // 返回 "Hello"
booleancontainsKey=hashMap.containsKey(3);  // 返回 false
intsize=hashMap.size();  // 返回 2
5、集合

Java 中的集合可以使用 Set 接口的实现类 HashSet 来创建。

创建 HashSet 对象:

HashSet<Integer>set=newHashSet<>();

集合的常用方法:

  • add(item):将元素添加到集合中。

  • remove(item):从集合中移除指定的元素。

  • contains(item):判断集合中是否包含指定的元素。

  • size():返回集合中元素的数量。

示例:

HashSet<Integer>set=newHashSet<>();
set.add(1);
set.add(2);
set.add(3);
booleancontainsItem=set.contains(2);  // 返回 true
intsize=set.size();  // 返回 3

以上是 Java 中常见数据结构的创建与使用方法,还有其他的数据结构和用法可以在 Java 官方文档或其他参考资料中进行了解和学习。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学不会只能哭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值