# Java常用方法 在 Java 算法题中,有许多封装好的常用方法,下面将按照不同的类进行分类列举并详细解释: ### 字符串相关类(\`String\`、\`StringBuilder\`、\`StringBuffer\`) #### \`String\`类 - \`length()\` - \*\*解释\*\*:返回字符串的长度,即字符串中字符的数量。 - \*\*示例\*\*: \`\`\`java String str = "hello"; int len = str.length(); // len 的值为 5 \`\`\` - \`charAt(int index)\` - \*\*解释\*\*:返回指定索引位置的字符。索引从 0 开始。 - \*\*示例\*\*: \`\`\`java String str = "hello"; char ch = str.charAt(1); // ch 的值为 'e' \`\`\` - \`substring(int beginIndex)\` 和 \`substring(int beginIndex, int endIndex)\` - \*\*解释\*\*:\`substring(int beginIndex)\` 返回从指定索引开始到字符串末尾的子字符串;\`substring(int beginIndex, int endIndex)\` 返回从 \`beginIndex\` 到 \`endIndex - 1\` 的子字符串。 - \*\*示例\*\*: \`\`\`java String str = "hello"; String sub1 = str.substring(2); // sub1 的值为 "llo" String sub2 = str.substring(1, 3); // sub2 的值为 "el" \`\`\` - \`equals(Object anObject)\` 和 \`equalsIgnoreCase(String anotherString)\` - \*\*解释\*\*:\`equals(Object anObject)\` 用于比较两个字符串的内容是否相等,区分大小写;\`equalsIgnoreCase(String anotherString)\` 用于比较两个字符串的内容是否相等,不区分大小写。 - \*\*示例\*\*: \`\`\`java String str1 = "hello"; String str2 = "Hello"; boolean isEqual1 = str1.equals(str2); // isEqual1 的值为 false boolean isEqual2 = str1.equalsIgnoreCase(str2); // isEqual2 的值为 true \`\`\` - \`indexOf(String str)\` 和 \`lastIndexOf(String str)\` - \*\*解释\*\*:\`indexOf(String str)\` 返回指定子字符串在原字符串中第一次出现的索引;\`lastIndexOf(String str)\` 返回指定子字符串在原字符串中最后一次出现的索引。如果未找到,则返回 -1。 - \`indexOf\`还有两个重载方法 \`\`\`java // 从字符串开头开始查找指定字符首次出现的位置 public int indexOf(int ch) // 从指定的索引位置开始查找指定字符首次出现的位置 public int indexOf(int ch, int fromIndex) // 从字符串开头开始查找指定子字符串首次出现的位置 public int indexOf(String str) // 从指定的索引位置开始查找指定子字符串首次出现的位置 public int indexOf(String str, int fromIndex) \`\`\` - \*\*示例\*\*: \`\`\`java String str = "hello world"; int index1 = str.indexOf("o"); // index1 的值为 4 int index2 = str.lastIndexOf("o"); // index2 的值为 7 \`\`\` - \`toCharArray()\` - \*\*解释\*\*:将字符串转换为字符数组。 - \*\*示例\*\*: \`\`\`java String str = "hello"; char\[\] charArray = str.toCharArray(); // charArray 为 \['h', 'e', 'l', 'l', 'o'\] \`\`\` - \`split(String regex)\` - \*\*解释\*\*:根据指定的正则表达式将字符串分割成字符串数组。 - \*\*示例\*\*: \`\`\`java String str = "hello,world"; String\[\] parts = str.split(","); // parts 为 \["hello", "world"\] \`\`\` \* \`contains(CharSequence s)\` \* \*\*解释:\*\* 如果当前字符串包含指定的字符序列 \`s\`,则返回 \`true\`; #### \`StringBuilder\` 和 \`StringBuffer\` 类 - \`append(String str)\` - \*\*解释\*\*:将指定的字符串追加到当前 \`StringBuilder\` 或 \`StringBuffer\` 对象的末尾。 - \*\*示例\*\*: \`\`\`java StringBuilder sb = new StringBuilder("hello"); sb.append(" world"); // sb 的内容变为 "hello world" \`\`\` - \`reverse()\` - \*\*解释\*\*:将当前 \`StringBuilder\` 或 \`StringBuffer\` 对象中的字符序列反转。 - \*\*示例\*\*: \`\`\`java StringBuilder sb = new StringBuilder("hello"); sb.reverse(); // sb 的内容变为 "olleh" \`\`\` - \`toString()\` - \*\*解释\*\*:将 \`StringBuilder\` 或 \`StringBuffer\` 对象转换为字符串。 - \*\*示例\*\*: \`\`\`java StringBuilder sb = new StringBuilder("hello"); String str = sb.toString(); // str 的值为 "hello" \`\`\` ### 字符相关类(\`Character\`) - \`isDigit(char ch)\` - \*\*解释\*\*:判断指定字符是否为数字字符(0 - 9)。 - \*\*示例\*\*: \`\`\`java char ch = '5'; boolean isDigit = Character.isDigit(ch); // isDigit 的值为 true \`\`\` - \`isLetter(char ch)\` - \*\*解释\*\*:判断指定字符是否为字母字符。 - \*\*示例\*\*: \`\`\`java char ch = 'a'; boolean isLetter = Character.isLetter(ch); // isLetter 的值为 true \`\`\` - \`isWhitespace(char ch)\` - \*\*解释\*\*:判断指定字符是否为空白字符,如空格、制表符、换行符等。 - \*\*示例\*\*: \`\`\`java char ch = ' '; boolean isWhitespace = Character.isWhitespace(ch); // isWhitespace 的值为 true \`\`\` ### 数组相关类(\`Arrays\`) - \`sort(int\[\] a)\` - \*\*解释\*\*:对指定的数组进行升序排序。 - \*\*示例\*\*: \`\`\`java int\[\] arr = {3, 1, 2}; Arrays.sort(arr); // arr 变为 \[1, 2, 3\] \`\`\` - \`binarySearch(int\[\] a, int key)\` - \*\*解释\*\*:在已排序的数组中使用二分查找算法查找指定的键。如果找到,则返回键的索引;否则返回一个负数,表示如果插入该键,它应该插入的位置的相反数减 1。 - \*\*示例\*\*: \`\`\`java int\[\] arr = {1, 2, 3}; int index = Arrays.binarySearch(arr, 2); // index 的值为 1 \`\`\` - \`equals(int\[\] a, int\[\] a2)\` - \*\*解释\*\*:比较两个数组的内容是否相等。 - \*\*示例\*\*: \`\`\`java int\[\] arr1 = {1, 2, 3}; int\[\] arr2 = {1, 2, 3}; boolean isEqual = Arrays.equals(arr1, arr2); // isEqual 的值为 true \`\`\` - \`fill(int\[\] a, int val)\` - \*\*解释\*\*:将指定的值填充到数组的所有元素中。 - \*\*示例\*\*: \`\`\`java int\[\] arr = new int\[3\]; Arrays.fill(arr, 5); // arr 变为 \[5, 5, 5\] \`\`\` - \`System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)\` - \*\*解释\*\*:将源数组中从指定位置开始的指定长度的元素复制到目标数组的指定位置。 - \*\*示例\*\*: \`\`\`java int\[\] src = {1, 2, 3}; int\[\] dest = new int\[3\]; System.arraycopy(src, 0, dest, 0, 3); // dest 变为 \[1, 2, 3\] \`\`\` ### 集合相关类(\`List\`、\`Set\`、\`Map\`) #### \`List\`(以 \`ArrayList\` 为例) - \`add(E e)\` - \*\*解释\*\*:将指定的元素添加到列表的末尾。 - \*\*示例\*\*: \`\`\`java List list = new ArrayList\<\>(); list.add(1); // list 变为 \[1\] \`\`\` - \`get(int index)\` - \*\*解释\*\*:返回列表中指定索引位置的元素。 - \*\*示例\*\*: \`\`\`java List list = new ArrayList\<\>(); list.add(1); int element = list.get(0); // element 的值为 1 \`\`\` - \`size()\` - \*\*解释\*\*:返回列表中元素的数量。 - \*\*示例\*\*: \`\`\`java List list = new ArrayList\<\>(); list.add(1); int size = list.size(); // size 的值为 1 \`\`\` - \`remove(int index)\` - \*\*解释\*\*:移除列表中指定索引位置的元素,并返回该元素。 - \*\*示例\*\*: \`\`\`java List list = new ArrayList\<\>(); list.add(1); int removed = list.remove(0); // removed 的值为 1,list 变为 \[\] \`\`\` #### \`Set\`(以 \`HashSet\` 为例) - \`add(E e)\` - \*\*解释\*\*:如果集合中不包含指定的元素,则将其添加到集合中。 - \*\*示例\*\*: \`\`\`java Set set = new HashSet\<\>(); set.add(1); // set 变为 \[1\] \`\`\` - \`contains(Object o)\` - \*\*解释\*\*:判断集合中是否包含指定的元素。 - \*\*示例\*\*: \`\`\`java Set set = new HashSet\<\>(); set.add(1); boolean contains = set.contains(1); // contains 的值为 true \`\`\` - \`size()\` - \*\*解释\*\*:返回集合中元素的数量。 - \*\*示例\*\*: \`\`\`java Set set = new HashSet\<\>(); set.add(1); int size = set.size(); // size 的值为 1 \`\`\` #### \`Map\`(以 \`HashMap\` 为例) - \`put(K key, V value)\` - \*\*解释\*\*:将指定的键值对添加到映射中。如果键已经存在,则更新其对应的值。 - \*\*示例\*\*: \`\`\`java Map map = new HashMap\<\>(); map.put("apple", 1); // map 变为 {"apple": 1} \`\`\` - \`get(Object key)\` - \*\*解释\*\*:返回指定键对应的值。如果键不存在,则返回 \`null\`。 - \*\*示例\*\*: \`\`\`java Map map = new HashMap\<\>(); map.put("apple", 1); int value = map.get("apple"); // value 的值为 1 \`\`\` - \`containsKey(Object key)\` - \*\*解释\*\*:判断映射中是否包含指定的键。 - \*\*示例\*\*: \`\`\`java Map map = new HashMap\<\>(); map.put("apple", 1); boolean containsKey = map.containsKey("apple"); // containsKey 的值为 true \`\`\` - \`size()\` - \*\*解释\*\*:返回映射中键值对的数量。 - \*\*示例\*\*: \`\`\`java Map map = new HashMap\<\>(); map.put("apple", 1); int size = map.size(); // size 的值为 1 \`\`\` ### 数学相关类(\`Math\`) - \`max(int a, int b)\` 和 \`min(int a, int b)\` - \*\*解释\*\*:\`max(int a, int b)\` 返回两个整数中的最大值;\`min(int a, int b)\` 返回两个整数中的最小值。 - \*\*示例\*\*: \`\`\`java int max = Math.max(3, 5); // max 的值为 5 int min = Math.min(3, 5); // min 的值为 3 \`\`\` - \`abs(int a)\` - \*\*解释\*\*:返回整数的绝对值。 - \*\*示例\*\*: \`\`\`java int absValue = Math.abs(-5); // absValue 的值为 5 \`\`\` - \`pow(double a, double b)\` - \*\*解释\*\*:返回 \`a\` 的 \`b\` 次幂。 - \*\*示例\*\*: \`\`\`java double result = Math.pow(2, 3); // result 的值为 8.0 \`\`\` - \`sqrt(double a)\` - \*\*解释\*\*:返回 \`a\` 的平方根。 - \*\*示例\*\*: \`\`\`java double sqrtValue = Math.sqrt(9); // sqrtValue 的值为 3.0 \`\`\` 以上是整理的 Java 中在算法题里比较常用的一些封装好的方法,熟练掌握这些方法可以提高解题效率。