news 2026/6/12 20:35:27

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

作者头像

张小明

前端开发工程师

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/6/13 9:06:48

Freqtrade策略评估终极指南:5步从数据小白到量化高手

Freqtrade策略评估终极指南&#xff1a;5步从数据小白到量化高手 【免费下载链接】freqtrade Free, open source crypto trading bot 项目地址: https://gitcode.com/GitHub_Trending/fr/freqtrade 还在为看不懂回测报告发愁吗&#xff1f;&#x1f914; 每次看到一堆数…

作者头像 李华
网站建设 2026/6/10 18:21:34

openMES开源制造执行系统终极部署指南:3步快速搭建企业级数字化工厂

openMES是一款严格遵循ISA88和ISA95国际标准构建的开源制造执行系统&#xff0c;为中小制造企业提供完整的数字化转型解决方案。该系统基于成熟的Java技术栈开发&#xff0c;通过模块化架构设计实现生产过程的全面数字化管理&#xff0c;助力企业快速构建智能化制造体系。 【免…

作者头像 李华
网站建设 2026/6/10 14:50:36

ExifToolGui终极指南:解锁专业照片元数据管理新境界

在数字摄影蓬勃发展的今天&#xff0c;每一张照片都承载着丰富的元数据信息。这些看似不起眼的数据&#xff0c;正是你优化工作流程、提升照片价值的关键所在。ExifToolGui作为一款功能强大的照片元数据管理工具&#xff0c;正在帮助无数摄影爱好者和专业人士实现高效管理。 【…

作者头像 李华
网站建设 2026/6/12 13:52:38

PyQt-Fluent-Widgets 终极指南:10分钟打造现代化桌面应用

PyQt-Fluent-Widgets 终极指南&#xff1a;10分钟打造现代化桌面应用 【免费下载链接】PyQt-Fluent-Widgets A fluent design widgets library based on C Qt/PyQt/PySide. Make Qt Great Again. 项目地址: https://gitcode.com/gh_mirrors/py/PyQt-Fluent-Widgets 还在…

作者头像 李华
网站建设 2026/6/11 10:26:28

如何用扫码方式获取阿里云盘Refresh Token?

如何用扫码方式获取阿里云盘Refresh Token&#xff1f; 【免费下载链接】aliyundriver-refresh-token QR Code扫码获取阿里云盘refresh token For Web 项目地址: https://gitcode.com/gh_mirrors/al/aliyundriver-refresh-token 还在为复杂的API授权流程而烦恼吗&#x…

作者头像 李华
网站建设 2026/6/12 10:26:46

Java:经久不衰的编程利器

Java自1995年诞生以来&#xff0c;凭借跨平台、面向对象、生态丰富等特性&#xff0c;稳居企业级开发、Android开发、大数据处理等领域的核心地位&#xff0c;成为程序员必备的编程语言之一。Java的核心优势在于跨平台性&#xff0c;这得益于Java虚拟机&#xff08;JVM&#xf…

作者头像 李华