1.StringBuilder删除最后一个字符
StringBuilder sb = new StringBuilder();
sb.append("abc");
sb.deleteCharAt(sb.length() - 1);
在一些涉及字符串构造的回溯算法中,需要把上一步添加的字符给删除掉。使用deleteCharAt方法可以做到。这个方法平时用的很少,特此记录。另外获取StringBuilder可以使用length()方法。
2.栈、队列的使用
不管是栈还是队列,都是用LinkedList实现。与其记住那么多方法,不如就简单记住以下6个方法,满足所有情况下的使用。
LinkedList<Integer> list = new LinkedList<>();
list.addFirst(1);
int a = list.removeFirst();
int b = list.getFirst();
list.addLast(2);
int c = list.removeLast();
int d = list.getLast();
这样不管是出栈、入栈,还是出队列、加入队列,都可以自由选择对应的方法实现。
3.定义二维数组
二维数组中各个一维数组可以长度不同,甚至可以长度为0.
int[][] nums = {
{1,2,3},
{3,4,5},
{},
{0}
};
4.HashMap和HashSet判断元素是否存在
HashMap是containsKey()方法
HashSet是contains()方法
HashMap<String, String> map = new HashMap<>();
map.put("hello","world");
boolean a = map.containsKey("hello");
HashSet<String> set = new HashSet<>();
set.add("hello");
boolean b = set.contains("hello");
5.遍历HashMap的方法
调用entrySet()方法获取Entry集合,进行遍历,同时可以遍历到key和value
for (Map.Entry<String, String> entry : map.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
}
6.字符和int的相加结果是int
System.out.println('0' + 1); //输出49,而不是1
所以,如果进行StringBuilder.append()操作时要注意。
7.Memory Limit Exceeded 往往是没有循环条件中没有将条件变量修改
比如while(i > 0) {} 循环中忘记了给i–
8.链表操作,最后别忘了断开
在LeetCode138 复制带随机指针的链表这歌题目中,最后一步要将一个链表的奇数节点和偶数节点分别组成两个新的节点。在遍历到最后时,需要主动断开最后一个奇数节点到偶数节点的指针。
9.字符数组转为String
char[] arr = {'a','b','c'};
String str = new String(arr);