StringBuffer ,StringBulider,String三者之间的区别和Map遍历的四种方法

StringBuffer ,StringBulider,String三者之间的区别和Map遍历的四种方法

StringBuffer,StringBuilder,String

本周做算法题的时候,看到了一些题有关字符串的题解有用的是StringBuffer,StringBuilder的一些方法,学习之后,感觉StringBuffer,StringBuilder对于字符串的修改是真的很方便。
StringBuilder是Java中的一个类,用于处理可变字符串(mutable string)。它提供了一种高效的方式来构建、修改和操作字符串
StringBuffer是Java中的一个类,与StringBuilder类似,用于处理可变字符串(mutable string)。它提供了一种线程安全的方式来构建、修改和操作字符串。

两者的主要方法基本一致,这里用StringBuffer 举例
主要方法:
序号 方法描述
1 :public StringBuffer append(String s)
将指定的字符串追加到此字符序列。
2 :public StringBuffer reverse()
将此字符序列用其反转形式取代。
3 :public delete(int start, int end)
移除此序列的子字符串中的字符。
4 :public insert(int offset, int i)
将 int 参数的字符串表示形式插入此序列中。
5 :insert(int offset, String str)
将 str 参数的字符串插入此序列中。
6 :replace(int start, int end, String str)
使用给定 String 中的字符替换此序列的子字符串中的字符。

String、StringBuilder和StringBuffer是Java中用于处理字符串的类,它们之间有以下区别

可变性(Mutability)

String类是不可变的(immutable),一旦创建就不能被修改。每次对字符串进行操作时,都会创建一个新的字符串对象。
StringBuilder和StringBuffer是可变的(mutable),可以直接在原始对象上进行操作而不需要创建新的对象。

线程安全性(Thread Safety):

String类是线程安全的,因为它是不可变的,多个线程可以同时访问和共享相同的字符串对象。
StringBuilder是非线程安全的,适用于单线程环境下的字符串操作。
StringBuffer是线程安全的,适用于多线程环境下的字符串操作,但由于同步开销,性能较StringBuilder略低。

性能(Performance):

在字符串操作较少或短小的情况下,String类具有良好的性能,因为字符串常量池可以重用字符串对象。
StringBuilder在单线程环境中具有最好的性能,因为它不需要额外的同步操作。
StringBuffer在多线程环境中提供线程安全的操作,但由于同步机制,性能稍低于StringBuilder。

适用场景:

String适用于存储和操作不经常改变的字符串,例如常量、配置值等。
StringBuilder适用于单线程环境中需要频繁修改字符串内容的场景。
StringBuffer适用于多线程环境中需要共享、安全操作字符串的场景。

综上所述,String、StringBuilder和StringBuffer在可变性、线程安全性和性能方面有所不同。选择合适的类取决于你的需求,如果需要频繁修改字符串且在单线程环境中操作,可以使用StringBuilder;如果在多线程环境中需要共享和安全地操作字符串,可以使用StringBuffer;如果字符串是固定的或者只读取操作,可以使用String。

Map的四种遍历方法

//第一种

System.out.println("通过Map.keySet遍历key和value:");
  for (String key : map.keySet()) {
   System.out.println("key= "+ key + " and value= " + map.get(key));
  }

//第二种

  System.out.println("通过Map.entrySet使用iterator遍历key和value:");
  Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
  while (it.hasNext()) {
     Map.Entry<String, String> entry = it.next();
     System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
  }

//第三种:推荐使用这一种

 System.out.println("通过Map.entrySet遍历key和value");
 for (Map.Entry<String, String> entry : map.entrySet()) {
     System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
  }

//第四种

  System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
  for (String v : map.values()) {
     System.out.println("value= " + v);
   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值