大概记录一下java基础语法ww
1. 数据类型与变量
8大基本数据类型
| 类型 |
描述 |
大小 |
示例 |
byte |
字节 |
8-bit |
byte b = 100; |
short |
短整型 |
16-bit |
short s = 1000; |
int |
整型 |
32-bit |
int i = 123; |
long |
长整型 |
64-bit |
long l = 123L; (末尾加L) |
float |
单精度 |
32-bit |
float f = 10.5f; (末尾加f) |
double |
双精度 |
64-bit |
double d = 20.5; |
char |
字符 |
16-bit |
char c = 'A'; (单引号) |
boolean |
布尔 |
1-bit |
boolean flag = true; |
引用类型
1 2 3
| String str = "Hello"; Integer num = 10; int[] arr = {1, 2};
|
2. 运算符 (Operators)
- 算术:
+, -, *, /, %, ++, --
- 关系:
==, !=, >, <, >=, <=
- 逻辑:
&& (短路与), || (短路或), ! (非)
- 三元:
条件 ? 真值 : 假值1
| int max = (a > b) ? a : b;
|
3. 数组与字符串 (Array & String)
数组
数组是Java语言内置的、最基本的数据结构。数组在创建时固定大小,无法动态改变。数组提供的方法很少,只有基本的访问和赋值操作。Java 支持锯齿数组,在 Java 中,二维数组实际上是 “数组的数组”
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 42 43 44
| int[] arr = new int[5]; int[] arr2 = {1, 2, 3, 4, 5}; int len = arr2.length;
String p = ""; int[] arr3 = p.toCharArray(); boolean a = Arrays.equal("JAVA", "java");
int[][] matrix = new int[3][];
matrix[0] = new int[2]; matrix[1] = new int[5]; matrix[2] = new int[3];
int[][] temp = new int [n][]; for (int i = 0; i < n; i++) temp[i] = matrix[i].clone();
Arrays.sort(nums);
int[] nums = new int []; int res = 0; …… for (int num : nums){ res ^= num; }
System.arraycopy(newArr, 0, nums, 0, n);
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
|
字符串 (String - 不可变)
1 2 3 4 5 6
| String s = "Java"; int len = s.length(); char c = s.charAt(0); String sub = s.substring(1, 3); boolean b = s.equals("Java"); String[] parts = s.split(",");
|
4. 常用集合
需导入: import java.util.*;
List (有序,可重复)
List是一个接口,ArrayList是List接口的一个实现类(基于动态数组)。ArrayList是动态数组,可以自动扩容,因此可以动态增长。ArrayList作为集合框架的一部分,提供了丰富的方法,如添加、删除、查找、排序等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); String s = list.get(0); list.remove(0); int size = list.size(); boolean has = list.contains("A"); ans.isEmpty() ans.size()
int[][] res = ans.toArray(new int[ans.size()][]);
# 对于二维的arraylist,获取其中的值要使用两次.get() int res = list.get(0).get(0)
|
Set (无序,不可重复)
1 2 3
| Set<Integer> set = new HashSet<>(); set.add(1); set.add(1);
|
Map (键值对)
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
| Map<String, Integer> map = new HashMap<>(); HashMap<Character, Integer> map2 = new HashMap<Character, Integer>(); map.put("Java", 100); map.put("Python", 90); Integer score = map.get("Java"); boolean hasKey = map.containsKey("Java");
for (String key : map.keySet()) { ... } for (Map.Entry<String, Integer> entry : map.entrySet()) { ... }
Map<Character, Character> = new HashMap<Character, Character>(){{ put(')', '('); put('[', ']'); put('{', '}'); }};
Map<Character, Character> pairs = new HashMap<Character, Character>(); pairs.put(')', '('); pairs.put(']', '['); pairs.put('}', '{');
|
5. 常用函数
排序
1 2 3 4 5 6 7 8 9
| Arrays.sort(array, comparator)
Arrays.sort(array, Comparator.comparingInt(a -> a[0]));
Arrays.sort(intervals, Comparator.comparingInt(a -> a[0]).reversed());
Arrays.sort(intervals, Comparator.comparingInt(a -> a[0]).thenComparingInt(a -> a[1]));
|
6. 一些数据结构
栈
栈(Stack)是一种遵循 后进先出(LIFO, Last In First Out) 原则的线性数据结构,只能在栈顶进行元素的添加(入栈)和删除(出栈)操作。
在 Java 中,官方推荐使用 Deque(双端队列)接口结合其实现类(如 LinkedList/ArrayDeque)来实现栈功能,而非直接使用老旧的 Stack 类(Stack 类继承自 Vector,设计存在缺陷)。
栈的声明与初始化
核心语法:Deque<数据类型> 栈名 = new 实现类<数据类型>();
1 2 3 4 5 6 7 8 9 10 11
| import java.util.Deque; import java.util.LinkedList;
Deque<Character> charStack = new LinkedList<Character>();
Deque<Integer> intStack = new LinkedList<Integer>();
Deque<String> strStack = new ArrayDeque<String>();
|
语法说明
| 部分 |
含义 |
Deque |
双端队列接口,定义了栈的核心操作方法(push/pop/peek 等) |
<Character> |
泛型,限定栈中只能存放指定类型的元素(避免类型错误) |
stack |
栈的变量名,可自定义(如 charStack、intStack) |
new LinkedList<>() |
创建实现类对象,LinkedList/ArrayDeque 均实现了 Deque 接口 |
基本操作函数
| 方法名 |
功能描述 |
返回值/说明 |
push(E e) |
入栈(将类型E的元素e压入栈顶) |
无返回值,失败抛异常 |
pop() |
出栈(移除并返回栈顶元素) |
返回栈顶元素,栈空抛异常 |
peek() |
查看栈顶元素(不移除) |
返回栈顶元素,栈空返回 null |
isEmpty() |
判断栈是否为空 |
空返回 true,非空返回 false |
size() |
获取栈中元素个数 |
返回 int 类型的元素数量 |
clear() |
清空栈中所有元素 |
无返回值 |
示例代码
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
| import java.util.Deque; import java.util.LinkedList;
public class StackDemo { public static void main(String[] args) { Deque<Character> stack = new LinkedList<>();
stack.push('A'); stack.push('B'); stack.push('C'); System.out.println("入栈后栈内容:" + stack);
Character top = stack.peek(); System.out.println("栈顶元素:" + top);
Character popEle = stack.pop(); System.out.println("出栈元素:" + popEle); System.out.println("出栈后栈内容:" + stack);
boolean isEmpty = stack.isEmpty(); System.out.println("栈是否为空:" + isEmpty);
int size = stack.size(); System.out.println("栈元素个数:" + size);
stack.clear(); System.out.println("清空后栈是否为空:" + stack.isEmpty()); } }
|
输出结果
1 2 3 4 5 6 7
| 入栈后栈内容:[C, B, A] 栈顶元素:C 出栈元素:C 出栈后栈内容:[B, A] 栈是否为空:false 栈元素个数:2 清空后栈是否为空:true
|
注意事项
- 避免使用
java.util.Stack 类:该类是早期设计的栈实现,继承自 Vector,方法线程安全但效率低,且不符合面向接口编程的规范。
- 空栈调用
pop() 会抛 NoSuchElementException:建议先通过 isEmpty() 判断栈是否为空,再执行出栈操作。
ArrayDeque 比 LinkedList 更高效:如果不需要链表的额外功能,优先使用 ArrayDeque 实现栈(基于数组,访问速度更快)。