上一篇地址:持续总结中!2024年面试必问 100 道 Java基础面试题(二十六)-CSDN博客
五十三、StringJoiner有什么用?
StringJoiner
是 Java 8 引入的一个实用工具类,它用于将字符串集合(字符串数组或 Iterable
集合)合并成一个单独的字符串,同时可以在元素之间插入分隔符,并允许设置一个空集合的默认值。StringJoiner
类位于 java.util
包中。
StringJoiner
的用途
- 合并字符串:将多个字符串合并成一个单一的字符串。
- 插入分隔符:在合并的字符串之间插入自定义的分隔符。
- 处理空集合:如果提供的字符串集合为空,可以使用一个默认的字符串代替。
- 设置前缀和后缀:可以为合并后的字符串设置前缀和后缀。
StringJoiner
的构造器和方法
- 构造器:
StringJoiner(String separator)
创建一个新的StringJoiner
实例,使用指定的分隔符。 - 构造器:
StringJoiner(String separator, String prefix, String suffix)
创建一个新的StringJoiner
实例,使用指定的分隔符、前缀和后缀。 add
方法:StringJoiner add(String element)
将指定的字符串元素添加到StringJoiner
实例中。merge
方法:StringJoiner merge(StringJoiner other)
将另一个StringJoiner
实例中的所有元素添加到此实例中。setEmptyValue
方法:StringJoiner setEmptyValue(String emptyValue)
设置当StringJoiner
实例为空时返回的字符串。toString
方法:String toString()
返回由StringJoiner
管理的字符串集合合并而成的字符串。
示例代码
import java.util.StringJoiner;
public class StringJoinerExample {
public static void main(String[] args) {
String[] parts = {"Java", "Python", "C++", "Kotlin"};
StringJoiner sj = new StringJoiner(", ", "Languages: [", "]");
for (String part : parts) {
sj.add(part);
}
String result = sj.toString();
System.out.println(result); // "Languages: [Java, Python, C++, Kotlin]"
// 处理空集合
StringJoiner emptyJoiner = new StringJoiner("-", "", " empty");
String emptyResult = emptyJoiner.toString(); // " empty"
}
}
在这个示例中,我们创建了一个 StringJoiner
实例,它使用逗号加空格作为分隔符,并且设置了前缀 "Languages: [" 和后缀 "]"。然后,我们添加了一些字符串元素到 StringJoiner
中,并打印出合并后的结果。
注意事项
StringJoiner
是不可变的,其状态(分隔符、前缀、后缀和元素集合)在创建后不能被改变。- 使用
StringJoiner
可以避免手动编写字符串连接的循环,使代码更加简洁和易于维护。
总结来说,StringJoiner
是一个非常有用的类,它提供了一种方便的方式来合并字符串集合,并允许自定义分隔符、前缀和后缀,以及处理空集合的情况。
五十四、Java所有类的祖先类是哪个?
在Java中,所有类都有一个共同的祖先类,即java.lang.Object
。Object
类位于Java继承层次结构的顶端,它是Java语言的根类。
Object
类的用途
- 继承的起点:Java中的每个类默认继承自
Object
类,除非显式地继承自另一个类。 - 方法提供:
Object
类提供了一些基本的方法,如equals()
、hashCode()
、toString()
、clone()
、wait()
、notify()
和notifyAll()
等,这些方法可以被子类重写以提供特定的实现。 - 垃圾回收:
Object
类中的wait()
、notify()
和notifyAll()
方法与Java的垃圾回收和多线程机制紧密相关。
Object
类的基本方法
equals(Object obj)
:检查两个对象是否相等。默认实现比较的是对象的内存地址,但通常需要被重写以提供基于内容的比较。hashCode()
:返回对象的哈希码值。通常与equals()
方法配合使用,如果两个对象通过equals()
比较是相等的,那么它们的hashCode()
值也必须相等。toString()
:返回对象的字符串表示。默认实现返回一个字符串,该字符串由类名、符号“@”以及对象的哈希码的无符号十六进制表示组成。通常需要被重写以提供更有用的字符串表示。clone()
:创建并返回对象的一个副本。这是一个受保护的方法,需要在子类中被重写为public
,并且通常需要处理深拷贝和浅拷贝的问题。wait()
、notify()
和notifyAll()
:这些方法是与多线程操作相关的,用于线程间的协调。
示例代码
public class MyCustomClass extends Object {
@Override
public boolean equals(Object obj) {
// 实现equals逻辑
}
@Override
public int hashCode() {
// 实现hashCode逻辑
}
@Override
public String toString() {
// 实现toString逻辑
}
// 其他自定义方法和属性
}
public class Main {
public static void main(String[] args) {
MyCustomClass myObject = new MyCustomClass();
System.out.println(myObject.toString()); // 调用继承自Object类的toString()方法
}
}
在这个示例中,MyCustomClass
继承自Object
类,并重写了equals()
、hashCode()
和toString()
方法。
注意事项
- 虽然所有Java类都是
Object
类的子类,但Object
类本身并没有实现任何接口。 - 在Java中,
Object
类是最终类(final
),这意味着它不能被继承。
总结来说,Object
类是Java类继承层次结构的根,提供了一些基本的方法,这些方法可以被子类重写以提供特定的行为。理解Object
类的作用和方法是学习Java面向对象编程的重要部分。