整理的内容
- OJ在线测试输入输出的模板
- Java常用数据结构以及操作
- 字符串常用操作
1.OJ在线测试输入输出的模板
整体框架如下:
1
2
3
4
5
6
7
8
9
10
11import java.util.*;
import java.io.*;
public class Main(){
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){ //注意,如果输入是多个测试用例,请通过while循环处理多个测试用例
}
}
}
在main函数中写代码
注意:
不要自定义包名称,否则会报错,即不要添加package answer之类的语句;
您可以写很多个类,但是必须有一个类名为 Main,并且为public属性,并且Main为唯一的public class;
Main类的里面必须包含一个名字为’main’的静态方法(函数),这个方法是程序的入口。
读取输入,有若干种方法
1
2
3
4
5
6
7
8
9
10
11
12
13// 读一个整数
int n = sc.nextInt();
// 读一个字符串
String s = sc.next();
// 读一个浮点数
double t = sc.nextDouble();
// 读一整行
String s = sc.nextLine();
// 判断是否有下一个输入
sc.hasNext()
sc.hasNextInt()
sc.hasNextDouble()
sc.hasNextLine()输出方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42System.out.println(); // 调用println()方法时,会自动在后面加上换行符
System.out.print(); // 如果不希望它加换行符的话,就要使用print()方法
System.out.printf(); // 格式化输出,不会自动加换行符
/*** 输出字符串 ***/
// %s表示输出字符串,也就是将后面的字符串替换模式中的%s
System.out.printf("%s", new Integer(1212));
// %n表示换行
System.out.printf("%s%n", "end line");
// 还可以支持多个参数
System.out.printf("%s = %s%n", "Name", "Zhangsan");
// %S将字符串以大写形式输出
System.out.printf("%S = %s%n", "Name", "Zhangsan");
// 支持多个参数时,可以在%s之间插入变量编号,1$表示第一个字符串,3$表示第3个字符串
System.out.printf("%1$s = %3$s %2$s%n", "Name", "san", "Zhang");
/*** 输出boolean类型 ***/
System.out.printf("true = %b; false = ", true);
System.out.printf("%b%n", false);
/*** 输出整数类型***/
Integer iObj = 342;
// %d表示将整数格式化为10进制整数
System.out.printf("%d; %d; %d%n", -500, 2343L, iObj);
// %o表示将整数格式化为8进制整数
System.out.printf("%o; %o; %o%n", -500, 2343L, iObj);
// %x表示将整数格式化为16进制整数
System.out.printf("%x; %x; %x%n", -500, 2343L, iObj);
// %X表示将整数格式化为16进制整数,并且字母变成大写形式
System.out.printf("%X; %X; %X%n", -500, 2343L, iObj);
/*** 输出浮点类型***/
Double dObj = 45.6d;
// %e表示以科学技术法输出浮点数
System.out.printf("%e; %e; %e%n", -756.403f, 7464.232641d, dObj);
// %E表示以科学技术法输出浮点数,并且为大写形式
System.out.printf("%E; %E; %E%n", -756.403f, 7464.232641d, dObj);
// %f表示以十进制格式化输出浮点数
System.out.printf("%f; %f; %f%n", -756.403f, 7464.232641d, dObj);
// 还可以限制小数点后的位数
System.out.printf("%.1f; %.3f; %f%n", -756.403f, 7464.232641d, dObj);
2. Java常用数据结构以及操作
数组
不可变长数组
int[] nums = new int[length];
操作:
- 获取数组的大小:
nums.length
- 获取数组的大小:
可变长数组
List<Integer> list = new ArrayList<>();
操作:
- 添加:
list.add(num);
- 获取:
list.get(index);
- 删除:
list.remove(index);
- 获取数组的大小:
list.size()
- 判断数组是否含有元素:
list.contains()
- 添加:
链表
基本数据结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24public class ListNode{
pubic int val;
public ListNode next;
public ListNode() {
}
public ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
public String toString() {
return "ListNode{" +
"val=" + val +
", next=" + next +
'}';
}
}操作:
- 获取链表节点的值:
int num = node.val;
- 获取链表节点的下一个:
ListNode temp = node.next
- 获取链表节点的值:
哈希
HashSet
实现
1
Set<Integer> hashset = new HashSet<>();
操作:
- 加入元素:
hashset.add(num);
- 删除元素:
hashset.remove(num);
- 判断集合是否为空:
hashset.isEmpty()
- 清空集合:
hashset.clear();
- 加入元素:
HashMap
实现
1
Map<String, Integer> map = new HashMap<>();
操作
- 加入键值对:
map.put(str, num);
- 删除键值对:
map.remove(str);
- 根据键获取值:
int numStr = map.get(str);
- 根据键获取值,如果键不存在,则返回设定的值:
int value = map.getOrDefault(str, default)
- 判断集合是否为空:
map.isEmpty()
- 清空集合:
map.clear();
- 加入键值对:
栈
实现
1
Deque<Integer> stack = new LinkedList<>();
操作
- 入栈:
stack.push(num);
- 出栈:
stack.pop();
- 获取栈顶元素:
int num = stack.peek();
- 判断栈是否为空:
stack.isEmpty()
- 获取栈的大小:
stack.size()
- 入栈:
队列
实现
1
Queue<Integer> queue = new LinkedList<>();
操作
- 在队尾端插入元素:
queue.offer(num);
- 移除队首元素:
queue.poll();
- 获取队首元素值:
int num = queue.peek();
- 在队尾端插入元素:
3.字符串常用操作
字符串与字符数组之间的转换
- 字符串转字符数组:
char[] ch = str.toCharArray();
- 字符数组转字符串:
String str = new String(ch);
- 字符串转字符数组:
StringBuilder
类的操作1
StringBuilder sb = new StringBuilder();
- 添加字符串:
sb.append(str);
StringBuilder
与String
之间的转换StringBuilder
转换为String
:String str = sb.toString();
String
转换为StringBuilder
:StringBuilder sb = new StringBuilder(str);
- 添加字符串: