当前位置: 首页 > news >正文

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

文章目录

      • 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
http://www.cnnetsun.cn/news/55927.html

相关文章:

  • 网易云音乐快速听歌神器:简单3步实现个性化推荐优化
  • 33、谷歌应用入门:日历与网站创建全攻略
  • MoeKoe Music如何成为二次元音乐爱好者的终极选择?5大核心优势解析
  • Android Studio中文界面完整教程:详细步骤解决英文界面困扰
  • 终极邮件查看工具:轻松处理多格式邮件的完整解决方案
  • AMD Ryzen处理器性能调优终极指南:解锁硬件潜能
  • 3步快速掌握Draw.io Mermaid插件:文本转图表的免费终极指南
  • OneMore终极指南:让OneNote变身全能知识管理神器
  • 从“内存溢出”到“稳定运行”——Spark OOM的终极解决方案
  • UKB_RAP生物医学数据分析平台完整使用教程
  • openMES开源制造执行系统:快速构建数字化工厂的完整解决方案
  • FF14插件自动跳过副本动画文章仿写prompt
  • OpenBoardView:免费开源电路板查看工具的完整使用指南
  • 22、绿色物联网与移动云计算融合:架构、应用与未来挑战
  • 29、新计算范式研究推进策略与绿色移动云计算研究方向
  • 算法题目优选(蓝桥杯备战)--2
  • 英雄联盟游戏助手:让你的排位赛效率翻倍的秘密武器
  • SuperCom串口调试终极指南:从新手到专家的快速精通教程
  • 科学文库CAJ文档处理方案:提升知识管理效率的工具
  • 附件-–-behaviac
  • Windows 7系统下Umi-OCR兼容方案:让老旧设备也能高效文字识别
  • 联想拯救者工具箱完整指南:解锁硬件潜能的一站式解决方案
  • 暗黑3终极自动化辅助工具完整使用指南
  • 网易云音乐扩展引擎:开启个性化音频体验新篇章
  • 【有手就行】LoRA:用你自己的数据来微调大模型,让大模型真正懂你
  • TouchGAL社区搭建完全指南:从零开始构建专属Galgame交流平台
  • BilibiliDown:快速便捷获取B站视频的终极解决方案
  • 如何利用OpenBoardView实现.brd电路板文件的终极查看方案
  • 零基础玩转AssetStudio:Unity资源提取实战手册
  • ThinkPad风扇控制终极指南:TPFanCtrl2实现Windows智能调速