String+String的细节

本文探讨Java中String拼接的+和+=运算符原理,强调StringBuilder在频繁拼接中的效率优势,并提供手动复用StringBuilder的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String str1 = "he";
String str2 = "llo";
String str3 = "world";
String str4 = str1 + str2 + str3;

+ 和 +=是Java中仅有的两个为了String类重载的运算符

内部实现:

+ 其实是生成一个StringBuilder对象,调用StringBuilder对象的append方法完成拼接。

值得注意的是:多次拼接并不会重复利用同一个StringBuilder对象,而是每加一次都会产生新的StringBuilder对象,如果在循环体内,加的次数过多可能导致空间不足,严重影响性能

String[] arr = {"he", "llo", "world"};
StringBuilder s = new StringBuilder();
for (String value : arr) {
    s.append(value);
}
System.out.println(s);

建议在拼接动作非常频繁的地方手动使用append方法,这样就会复用自己的StringBuilder了

### C++ 中 `map` 和 `string` 的使用方法 #### 使用 `map` 统计字符串出现次数 在给定的例子中,展示了如何利用 `map<string, int>` 来统计一组字符串数组内各个元素的频率。这里通过遍历字符串数组并更新映射表中的键值对来实现这一功能[^1]。 ```cpp #include <iostream> #include <map> #include <string> using namespace std; void test_map3() { string strs[] = {"西瓜", "苹果", "西瓜", "西瓜", "西瓜", "西瓜", "苹果", "樱桃"}; map<string, int> countMap; for (auto& str : strs) { auto ret = countMap.find(str); if (ret != countMap.end()) { ++(ret->second); } else { countMap.insert(make_pair(str, 1)); } } for (const auto& e : countMap) { cout << e.first << ": " << e.second << endl; } } ``` 这段代码创建了一个名为 `countMap` 的 `map` 对象用于存储每种水果名称及其对应的数量。对于每一个新遇到的字符串(即水果名),如果该字符串已经在 `map` 中存在,则增加其关联数值;反之则向 `map` 插入新的条目并将初始值设为1。最后打印出所有的键值对表示各水果的数量分布情况。 #### 遍历 `map` 除了上述方式外,在某些场景下可能更倾向于采用标准库提供的算法来进行容器操作。例如可以借助于 `std::for_each` 函数配合 lambda 表达式完成相同的功能[^2]: ```cpp #include <algorithm> // 导入 algorithm 头文件以访问 std::for_each // ... 在 main 函数或其他地方调用此函数 ... std::for_each(countMap.begin(), countMap.end(), [](const pair<const string, int>& p){ cout << p.first << ": " << p.second << '\n'; }); ``` 这种方法不仅简化了语法结构而且提高了可读性和灵活性。 #### 访问 `map` 迭代器类型 当处理常量对象时需要注意选择合适的迭代器类型。具体来说就是区分普通迭代器 (`iterator`) 和只读迭代器 (`const_iterator`) 。这取决于所使用的上下文环境以及是否允许修改被指向的数据项[^3]。 ```cpp map<int, int>::iterator it; // 可变迭代器 map<int, int> mmap; it = mmap.begin(); // 返回 iterator 类型 mmap.cbegin(); // 显式请求 const_iterator 类型 const map<int, int> const_mmap; const_mmap.begin(); // 自动推导为 const_iterator 类型 const_mmap.cbegin(); // 同样返回 const_iterator 类型 ``` 以上介绍了几种常见的关于 `map` 和 `string` 结合使用的模式和技术细节。希望这些例子能够帮助理解这两个重要 STL 容器类别的基本特性和应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值