java入门
字符串
剑指offer05 替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
熟悉的python版本
class Solution:
def replaceSpace(self, s: str) -> str:
res = []
for i in s:
if i != ' ':
res.append(i)
else:
res.append('%20')
return res
学习的java版本
class Solution {
public String replaceSpace(String s) {
StringBuilder res = new StringBuilder();
for(Character c : s.toCharArray())
{
if(c == ' ') res.append("%20");
else res.append(c);
}
return res.toString();
}
}
为了学会这道题需要多少前置知识?
看不懂的地方
StringBuilder
Character
str.toCharArray
res.toString
for(Character c : s.toCharArray())循环结构
Character 类
Character 类用于对单个字符进行操作。
Character 类在对象中包装一个基本类型 char 的值
char ch = 'a';
// Unicode 字符表示形式
char uniChar = '\u039A';
// 字符数组
char[] charArray ={ 'a', 'b', 'c', 'd', 'e' };
然而,在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情况。为了解决这个问题,Java语言为内置数据类型char提供了包装类Character类。
Character类提供了一系列方法来操纵字符。你可以使用Character的构造方法创建一个Character类对象,例如:
Character ch = new Character('a');
String类
String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上:
String s1 = "Runoob"; // String 直接创建
String s3 = s1; // 相同引用
String s4 = new String("Runoob"); // String 对象创建
String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了
StringBuilder 类
StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
public class RunoobTest{
public static void main(String args[]){
StringBuilder sb = new StringBuilder(10);
sb.append("Runoob..");
System.out.println(sb);
sb.append("!");
System.out.println(sb);
sb.insert(8, "Java");
System.out.println(sb);
sb.delete(5,8);
System.out.println(sb);
}
}
for循环
for(初始化; 布尔表达式(限制条件为True/False); 更新) {
//代码语句
}
- 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
- 然后,检测布尔表达式的值。如果为true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
- 执行一次循环后,更新循环控制变量。
- 再次检测布尔表达式。循环执行上面的过程。
java增强for循环
for(声明语句 : 表达式)
{
//代码句子
}
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
复盘问题
str.toCharArray是啥:是将题目中的string变成可迭代的string数组
res.toString是啥:是将StringBuilder变成符合题目输出的string
for(Character c : s.toCharArray())目的是为了让c在s这个字符串上遍历
Character c就是新的局部变量,s.toCharArray()是返回值为数组的方法,数组元素为char
就是说 除了for语句 其他地方都要分号 单引号和双引号也不能混用 真实纯纯不习惯了
第一天java AC!啦!
虽然 仍然是一个找不到工作的臭sb状态
前置知识?
public
ListNode
while循环段
int和int[]
对象和类
创建类和对象
对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:
- 声明:声明一个对象,包括对象名称和对象类型。
- 实例化:使用关键字 new 来创建一个对象。
- 初始化:使用 new创建对象时,会调用构造方法初始化对象。
public class Puppy{
public Puppy(String name){
//这个构造器仅有一个参数:name
System.out.println("小狗的名字是 : " + name );
}
public static void main(String[] args){
// 下面的语句将创建一个Puppy对象
Puppy myPuppy = new Puppy( "tommy" );
}
}
变量类型
在Java语言中,所有的变量在使用前必须声明。以下列出了一些变量的声明实例。注意有些包含了初始化过程。
int a, b, c; // 声明三个int型整数:a、 b、c
int d = 3, e = 4, f = 5; // 声明三个整数并赋予初值
byte z = 22; // 声明并初始化 z
String s = "runoob"; // 声明并初始化字符串 s
double pi = 3.14159; // 声明了双精度浮点型变量 pi
char x = 'x'; // 声明变量 x 的值是字符 'x'。
Java语言支持的变量类型有:
- 类变量:独立于方法之外的变量,用 static 修饰。
- 实例变量:独立于方法之外的变量,不过没有 static 修饰。
- 局部变量:类的方法中的变量。
修饰符
访问控制修饰符
Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。
- default (即默认,什么也不写):
在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。 - private :在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
- public : 对所有类可见。使用对象:类、接口、变量、方法
- protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
非访问修饰符
- static 修饰符,用来修饰类方法和类变量。 final 修饰符,用来修饰类、方法和变量,
- final修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
- abstract修饰符,用来创建抽象类和抽象方法。
- synchronized 和 volatile 修饰符,主要用于线程的编程。
运算符
自增自减运算符
i++ 是 i +=1
i-- 是 i-=1
前缀自增自减法(++a,–a): 先进行自增或者自减运算,再进行表达式运算。 后缀自增自减法(a++,a–):
先进行表达式运算,再进行自增或者自减运算
逻辑运算符
- && 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。
- | | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。
- ! 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。
三元运算符
variable x = (expression) ? value if true : value if false
实例
int a , b;
a = 10;
// 如果 a 等于 1 成立,则设置 b 为 20,否则为 30
b = (a == 1) ? 20 : 30;
System.out.println( "Value of b is : " + b );
// 如果 a 等于 10 成立,则设置 b 为 20,否则为 30
b = (a == 10) ? 20 : 30;
System.out.println( "Value of b is : " + b );
一些列表?
数组Array
数组变量的声明,和创建数组可以用一条语句完成,如下
//方法1
dataType[] array名 = new dataType[arraySize];
//方法2
dataType[] array名 = {value0, value1, ..., valuek};
ArrayList
ArrayList 是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
import java.util.ArrayList; // 引入 ArrayList 类
ArrayList<E> objectName =new ArrayList<>(); // 初始化
E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型。
内置数据类型 | 引用类型 |
---|---|
boolean | Boolean |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
String | String |
Java ArrayList 常用方法列表
方法 | 描述 |
---|---|
add() | 将元素插入到指定位置的 arraylist 中 |
clear() | 删除 arraylist 中的所有元素 |
clone() | 复制一份 arraylist |
get() | 通过索引值获取 arraylist 中的元素 |
indexOf() | 返回 arraylist 中元素的索引值 |
remove() | 删除 arraylist 里的单个元素 |
size() | 返回 arraylist 里元素数量 |
sort() | 对 arraylist 元素进行排序 |
toArray() | 将 arraylist 转换为数组 |
toString() | 将 arraylist 转换为字符串 |
forEach() | 遍历 arraylist 中每一个元素并执行特定操作 |
LinkedList
Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。
与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。
以下情况使用 ArrayList :
- 频繁访问列表中的某一个元素。
- 只需要在列表末尾进行添加和删除元素操作。
以下情况使用 LinkedList :
- 你需要通过循环迭代来访问列表中的某些元素。
- 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。