用java刷算法题的时候会用到一些常用的方法,这些方法包括字符串、数组、集合的方法。
Java获取数组的长度

1
2
3
4
5
6
7
String[][] data = new String[2][5];
System.out.println("第一维数组长度: " + data.length);
System.out.println("第二维数组长度: " + data[0].length);

// 字符数组转成字符串
char[] ch = {'a', 'b', 'c'};
String str = new String(ch);

String类常用方法

  • int length() 返回字符串长度
  • char charAt(int index) 返回指定下标位置的字符
  • char[] toCharArray() 将字符串转换为字符数组
  • String[] split(String regex) 将字符串按照分割符分割成字符串数组
  • Boolean equals(String str) 判断字符串是否相等
  • String substring(int beginIndex, int endIndex) 截取字符串(不包括endIndex)
  • String substring(int beginIndex) 截取字符串(包括beginIndex)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    String str = "Hello world!";
    String str1 = "yun";

    int l = str.length(); // l:12
    char c = str.charAt(1); // c:'e'

    char[] cArray = str.toCharArray();
    // cArray:['H','e','l','l','o',' ','w','o','r','l','d','!']

    String[] arr = str.split(" ");
    // arr:["Hello","world!"]

    Boolean eq = str1.equals(str); // eq:false
    String str2 = str.substring(0, 2); // str2:"He"
    String str3 = str.substring(2); // str3:"llo world!"
    StringBuffer
    StringBuffer 类和 String 类最大的区别在于它的内容和长度都是可以改变的。StringBuffer 类似一个字符容器,当在其中添加或删除字符时,所操作的都是这个字符容器,因此并不会产生新的 StringBuffer 对象。所以当要处理字符串增、删、改操作时一般都是将String类对象转换成StringBuffer 类对象然后再转换成字符串作为返回值。
    1
    2
    3
    4
    5
    6
    // 初始化StringBuffer 类对象(第一种)
    StringBuffer strBuffer = new StringBuffer("abc");

    // 初始化StringBuffer 类对象(第二种)
    String str = "abc";
    StringBuffer strBuffer = new StringBuffer(str);
    StringBuffer类常用方法
  • int length() 返回字符串实际长度
  • char charAt(int index) 返回指定下标位置的字符
  • StringBuffer append(char c) 添加字符到StringBuffer对象中末尾
  • StringBuffer append(String str) 添加字符串到StringBuffer对象中末尾
  • StringBuffer insert(int offset, String str) 在StringBuffer对象中的offset位置插入字符串str
  • StringBuffer deleteCharAt(int index) 移除StringBuffer对象中指定位置的字符
  • StringBuffer delete(int start, int end) 删除StringBuffer对象中指定范围的字符或字符串,区间[start,end)
  • StringBuffer replace(int start, int end, String s) 将StringBuffer对象中指定范围的字符或字符串用新的字符串s进行替换,区间[start, end)
  • void setCharAt(int index, char ch) 修改指定位置index处的字符
  • String toString() 返回StringBuffer缓冲区中的字符串对象
  • StringBuffer reverse() 将此StringBuffer对象用其反转形式取代
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    String str = "Hello world!";
    StringBuffer strBuffer = new StringBuffer(str);

    strBuffer.insert(1, "ttt"); // strBuffer:"Htttello world!"
    strBuffer.delete(1, 4); // strBuffer:"Hello world!"
    strBuffer.deleteCharAt(1); // strBuffer:"Hllo world!"
    strBuffer.setCharAt(1, 't'); // strBuffer:"Htlo world!"
    strBuffer.replace(0, 2, "Hel"); // strBuffer:"Hello world!"

    /****************测试append()***************/
    StringBuffer sBuffer = new StringBuffer("aaa"); // sBuffer:aaa
    sBuffer.append('b'); // sBuffer:aaab
    sBuffer.append("ccc"); // sBuffer:aaabccc
    String str = "ddd";
    sBuffer.append(str); // sBuffer:aaabcccddd
    注:java的String和StringBuffer两个类来封装对字符串的各种操作,存放于java.lang包中,java.lang 包下的类不用导包,在运行时,java.lang包下的类默认导入。
    List容器常用方法
  • add(Object element) 向列表的尾部添加指定的元素
  • add(int index, Object element) 在列表的指定位置插入指定元素
  • size() 返回列表中的元素个数
  • get(int index) 返回列表中指定位置的元素,index从0开始
  • set(int i, Object element) 将索引i位置元素替换为元素element并返回被替换的元素
  • clear() 从列表中移除所有元素
  • isEmpty() 判断列表是否包含元素,不包含元素则返回 true,否则返回false
  • remove(int index) 移除列表中指定位置的元素,并返回被删元素

将数组转成list集合:

1
2
String[] array = { "a", "b", "c"};
ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(array));

Stack容器常用方法

  • Boolean empty() 若栈为空则返回true,否则返回false
  • E peek() 查看当前的栈顶元素
  • E pop() 删除当前的栈顶元素,并将其作为返回值返回
  • E push(E e) 添加该数据到栈顶

PriorityQueue容器常用方法

  • offer(E e) 将指定元素插入此优先队列
  • poll() 移除并返回堆顶元素
  • peek() 获取堆顶元素
  • size() 返回元素个数
  • clear() 清空

offer()方法和add()方法的区别:两者都是往队列尾部插入元素,不同的是,当超出队列界限的时候,add()方法是抛出异常让你处理,而offer()方法是直接返回false

PriorityQueue初始化时默认创建的是小根堆,所以创建大根堆的方法为:

1
PriorityQueue<Integer> q = new PriorityQueue<>((o1, o2) -> (o2 - o1));

ArrayDeque容器常用方法

  • offer() - 将指定的元素插入ArrayDeque双端队列的末尾
  • offerFirst() - 在ArrayDeque双端队列的开始处插入指定的元素
  • offerLast() - 将指定的元素插入ArrayDeque双端队列的末尾
  • getFirst() - 返回ArrayDeque双端队列的第一个元素
  • getLast() - 返回ArrayDeque双端队列的最后一个元素
  • peek() - 返回ArrayDeque双端队列的第一个元素
  • peekFirst() - 返回ArrayDeque双端队列的第一个元素(等效于peek())
  • peekLast() - 返回ArrayDeque双端队列的最后一个元素
  • poll() - 返回并删除ArrayDeque双端队列的第一个元素
  • pollFirst() - 返回并删除ArrayDeque双端队列的第一个元素(等效于poll())
  • pollLast() - 返回并删除ArrayDeque双端队列的最后一个元素
  • size() - 返回ArrayDeque双端队列的长度

Map容器常用方法

  • V get(Object key) 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回null
  • V put(K key, V value) 在容器中新增键值对,若存在相同的键则覆盖原来的值,返回原来的值
  • V remove(Object key) 如果存在一个键的映射关系,则将其从此映射中移除,返回移除的值,不存在则返回null
  • Boolean containsKey(Object key) 如果 Map包含指定键的映射,则返回 true
  • V getOrDefault(Object key, V defaultValue) 当Map集合中有这个key时,就返回key对应的值,如果没有就返回默认值defaultValue。
  • Set keySet() 返回此映射中包含的键的Set集合

Map容器的迭代操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Map<String, String> map = new HashMap<String, String>();
map.put("一", "one");
map.put("二", "two");

// 获取key的set集合
Set<String> keySet = map.keySet();

// 创建迭代器
Iterator<String> it = keySet.iterator();

while(it.hasNext()) {
//获取每一个key
String key = it.next();
//通过key获取对应的value
String value = map.get(key);
System.out.println(key+"="+value);
}