news 2026/4/18 15:00:54

数组、字符串,集合的各种常用方法区分

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数组、字符串,集合的各种常用方法区分

文章目录

      • 1\. 灵魂三问:求长度/大小
      • 2\. 数组 (Array) —— `int[]`, `char[]`
      • 3\. 字符串 (String) —— 不可变对象
      • 4\. 集合 (Collections) —— 动态容器
        • A. List (常用实现: `ArrayList`)
        • B. Set (常用实现: `HashSet`)
        • C. Map (常用实现: `HashMap`)
        • D. Queue / Stack (常用实现: `LinkedList` 或 `ArrayDeque`)
      • 5\. 常见类型转换 (必须熟练)
      • ⚠️ 总结:避坑指南

1. 灵魂三问:求长度/大小

这是最容易搞混的,先把这个死记硬背下来:

数据类型语法是否带括号记忆口诀
数组(int[],char[]).length不带数组也是对象,length是它的一个属性
字符串(String).length()String 是类,这是它的方法
集合(List,Map,Set).size()集合里装了多少东西,用size

2. 数组 (Array) ——int[],char[]

不要用包装类声明!
数组是“死板”的,一旦创建,长度不能变。它的很多功能需要借助工具类java.util.Arrays

  • 声明:int[] arr = new int[5];int[] arr = {1, 2, 3};
  • 常用操作:
    • 排序:Arrays.sort(arr);(默认升序,O ( N log ⁡ N ) O(N \log N)O(NlogN))
    • 填充:Arrays.fill(arr, -1);(把数组全填成 -1)
    • 转字符串打印:Arrays.toString(arr);(记得我们刚说的吗?不要直接 toString)
    • 复制:Arrays.copyOf(arr, newLength);

3. 字符串 (String) —— 不可变对象

String 是只读的!任何修改 String 的操作(如 substring, replace)都不会改变原字符串,而是返回一个新的字符串。

  • 获取字符:s.charAt(i)(别用s[i],那是 C++ 写法)
  • 转数组:char[] chars = s.toCharArray();(改字符必备)
  • 截取:s.substring(start, end)(⚠️左闭右开[start, end))
    • s.substring(2, 5)取下标 2, 3, 4。
  • 比较内容:s.equals("abc")(⚠️千万别用====比的是地址)
  • 去空格:s.trim()(去掉首尾空格)
  • 分割:String[] parts = s.split(" ");

🚀 进阶:StringBuilder (可变字符串)
如果你需要频繁修改字符串(比如在循环里拼接),一定要用 StringBuilder,否则会创建无数垃圾对象,导致超时。

StringBuildersb=newStringBuilder();sb.append('a');// 尾部追加sb.deleteCharAt(sb.length()-1);// 删除最后一个字符 (回溯法常用)sb.reverse();// 反转字符串 (力扣常考)Stringres=sb.toString();// 变回 String

4. 集合 (Collections) —— 动态容器

力扣中最常用的三个接口:List,Set,Map

A. List (常用实现:ArrayList)

当做动态数组用。

  • 添加:list.add(val);
  • 获取:list.get(index);(别用list[index])
  • 删除:list.remove(index);
  • 排序:Collections.sort(list);(注意是Collections复数)
  • 转数组:int[] arr = list.stream().mapToInt(i->i).toArray();(写起来比较麻烦,一般手写循环转)
B. Set (常用实现:HashSet)

主要用于去重快速判断是否存在

  • 添加:set.add(val);(如果已存在,返回false,否则true)
  • 删除:set.remove(val);
  • 包含:set.contains(val);(O ( 1 ) O(1)O(1)时间复杂度)
C. Map (常用实现:HashMap)

键值对神器。

  • 添加/更新:map.put(key, value);
  • 获取:map.get(key);(不存在返回null)
  • 获取(带默认值):map.getOrDefault(key, 0);(力扣神器,计数时防止空指针)
  • 包含 Key:map.containsKey(key);
  • 遍历:
    for(Integerkey:map.keySet()){...}for(Integerval:map.values()){...}for(Map.Entry<Integer,Integer>entry:map.entrySet()){// entry.getKey(), entry.getValue()}
D. Queue / Stack (常用实现:LinkedListArrayDeque)

Java 官方推荐用Deque(双端队列) 接口来代替旧的Stack类。

  • 声明:Deque<Integer> stack = new ArrayDeque<>();
  • 当栈用 (Stack):
    • stack.push(1);(压栈)
    • stack.pop();(弹栈)
    • stack.peek();(看栈顶)
  • 当队列用 (Queue - BFS 常用):
    • queue.offer(1);(入队)
    • queue.poll();(出队)
    • queue.peek();(看队头)

5. 常见类型转换 (必须熟练)

刷题时经常需要在这个类型转到那个类型:

  1. String 转 int:
    int num = Integer.parseInt("123");
  2. int 转 String:
    String s = String.valueOf(123);
  3. char 转 int:
    int num = ch - '0';(利用 ASCII 码差值)
  4. List 转 Array:
    Integer[] arr = list.toArray(new Integer[0]);(注意是包装类数组)

⚠️ 总结:避坑指南

  1. 判断相等:
    • 数字 (int) 用==
    • 字符串 (String) 和对象 (Integer在 -128~127 之外)必须用.equals()
  2. 判空顺序:
    先判null再判长度,否则空指针异常 (NPE)。
    if (s != null && s.length() > 0)
  3. 数组越界:
    时刻警惕index < 0index >= length
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 6:32:29

43、谷歌应用入门与博客营销及应用集成指南

谷歌应用入门与博客营销及应用集成指南 1. 博客营销要点 互联网上博客众多,据估计超过1亿个。每个博客都在努力吸引读者,这使得博客领域竞争异常激烈。要打造一个成功的博客,可遵循以下实用建议: - 发布有趣且有深度的文章 :这是吸引读者的基础,有趣的内容能引发读者…

作者头像 李华
网站建设 2026/4/18 7:02:10

你的下载管理为何如此低效?AriaNg正在重新定义现代下载体验

你的下载管理为何如此低效&#xff1f;AriaNg正在重新定义现代下载体验 【免费下载链接】AriaNg AriaNg, a modern web frontend making aria2 easier to use. 项目地址: https://gitcode.com/gh_mirrors/ar/AriaNg 还在为复杂的命令行参数头疼&#xff1f;在手机和电脑…

作者头像 李华
网站建设 2026/4/18 7:01:31

GB/T 7714 BibTeX样式库:告别参考文献排版困扰的智能解决方案

还在为毕业论文的参考文献格式而烦恼吗&#xff1f;面对GB/T 7714标准的复杂要求&#xff0c;许多研究者在文献排版上耗费了大量时间。今天介绍的这款BibTeX样式库&#xff0c;将彻底改变你的参考文献管理体验。&#x1f3af; 【免费下载链接】gbt7714-bibtex-style GB/T 7714-…

作者头像 李华
网站建设 2026/4/18 13:30:23

OnmyojiAutoScript游戏自动化系统架构设计与部署方案

技术架构概述 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript OnmyojiAutoScript&#xff08;OAS&#xff09;采用模块化分布式架构设计&#xff0c;构建了一个完整的游戏自动化解…

作者头像 李华
网站建设 2026/4/18 7:23:59

Formily终极指南:高效UI组件深度集成与性能优化架构

Formily终极指南&#xff1a;高效UI组件深度集成与性能优化架构 【免费下载链接】formily &#x1f4f1;&#x1f680; &#x1f9e9; Cross Device & High Performance Normal Form/Dynamic(JSON Schema) Form/Form Builder -- Support React/React Native/Vue 2/Vue 3 …

作者头像 李华