本文参考书目:《labuladong的算法小抄》
数组
# 初始化方法
int m = 5, n=10;
int[] nums = new int[n]
boolean[][] visited = new boolean[m][n]
# 当数组以函数参数的形式传入时一般需要做非空检查
if(nums.length == 0){
return;
}
for(int i = 0; i <nums.length;i++){
// 访问nums[i]
}
字符串 String
# 处理复杂,不能直接修改
# 不支持用[]直接访问其中的字符
# 转化成char[]类型后才能修改
String s1 = “hello world”;
char c = s1.charAt(2);//获取s1[2]的字符
// charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。
char [] chars = s1.toCharArray();
chars[1] = ‘a’;
String s2 = new String(chars);
System.out.println(s2);
字符串类型相等的比较
//一定要使用equals 方法判断字符串是否相同
if(s1.equals(s2)){
//相同}
else{
// 不相同
}
否则会出现一些不宜察觉的Bug:
字符串拼接 stringbulider类与
//可以使用+号进行拼接 不可以使用==比较 否则容易出现不宜察觉的bug
String s3 = s1 + “!”;
System.out.println(s3);
虽然支持用+进行拼接 但是效率不高 不建议在for 循环中使用
如果需要进行频繁的字符串拼接,推荐使用srtingbuilder类
线程不安全 性能优异 可变性
StringBuilder sb = new StringBuilder();
for(char c = ‘a’;c <=’f’;c++)
{ sb.append(c);
}
Sb.append(‘g’).append(‘hij’).append(123);
String res = sb.toString();
System.out.println(res);
动态数组 ArrayList
List类型的子类
相当于对java内置的数组类型进行了包装 底层也是数组实现的
初始化一个存储String类型数据的动态数组
ArrayList<String> nums = new ArrayList<>();
初始化一个存储int 类型数据的动态数组
ArrayList<Interger> strings = new ArrayList<>();
判断数组是否为空
Boolean isEmpty()
返回数组中元素的个数
int size()
返回索引index的元素
E get (int index)
数组尾部添加e
Boolean add(E e)
双链表 LinkedList
List类型的子类
与ArrayList不同的是,我们更多地使用了LinkedList 对于头部和尾部元素的操作 因为底层数据结构为链表.所以直接操作头尾部的元素效率较高
LinkedList<Integer> nums = new LinkedLIst<>();
Boolean isEmpty()
Int size()
Boolean contains(Object o) 时间复杂度为O(N)
在链表尾部添加元素e
Boolean add(E e)
Void addFirst(E e)
E removeFirst()
E removeLast()
其中只有contains方法的时间复杂度是O(N),因为必须遍历整个链表
哈希表 HashMap
初始化方法
HashMap<Integer,String> map = new HashMap<>();
HashMap<String,int[]> map = new HashMap<>();
K 代表键的类型 V代表值的类型
判断是否存在键key
Map.containsKey(Object key)
Map.get ( Object key)
获得键对应的值,若key 不存在,则返回null
Map.put (K key,V value)
将key 和vaule 键值对存入哈希表
V remove (Object key)
如果key存在 删除key 并返回对应的值
V getOrDefault(Object key ,V defaultValue)
获得key的值 如果不存在 则返回defaultvalue
Set<K> keySet()
获得哈希表中的所有key
V putIfAbsent(K key ,V value)
如果key 不存在 则存入 如果key 存在 则什么都不做
哈希集合 HashSet
Set <String> set = new HashSet<>();
Boolean add(E e)
Boolean contains(Object o)
Boolean remove(Object o)
队列 Queue
Queue是一个接口(Interface),因此它的初始化方法有些特别
有多个实现类 包括linkedlist,ArrayDeque,Priority Queue
新建一个存储string的队列
Queue<String> q = new LinkedList<>();
Boolean isEmpty()
Int size()
E peek()
E poll()
Boolean offer(E e)
堆栈 Stack
Stack<Integer> s = new Strack<>();
Boolean isEmpty();
Int size()
将元素压入栈顶
E push (E item)
返回栈顶元素
E peek ()
删除并返回栈顶元素
E pop()
返回值
return new int[]{hashtable.get(target-nums[i]),i};
return new int[0];