如果对成员变量初始化为"",数组长度定义为20,但只对前10个进行有参构造,其余进行无参构造,并对后续10对象赋值,前10给对象依旧有英语单词和汉语,这样还能排序吗
时间: 2024-02-25 21:58:28 浏览: 107
是可以排序的。初始化为 "" 的成员变量不会影响排序结果,只有在有多个成员变量时,才需要考虑其对排序结果的影响。
对于数组长度为 20,但只对前 10 个进行有参构造,其余进行无参构造,并对后续 10 个对象赋值的情况,可以使用以下代码进行排序:
```java
import java.text.Collator;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Locale;
public class MyClass implements Comparable<MyClass> {
private String str;
public MyClass() {
this.str = "";
}
public MyClass(String str) {
this.str = str;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
@Override
public int compareTo(MyClass o) {
// 使用中文拼音比较器排序
Comparator<String> cmp = Collator.getInstance(Locale.CHINA);
return cmp.compare(this.str, o.getStr());
}
public static void main(String[] args) {
MyClass[] arr = new MyClass[20];
arr[0] = new MyClass("bbb");
arr[1] = new MyClass("aaa");
arr[2] = new MyClass("ccc");
arr[3] = new MyClass("你好");
arr[4] = new MyClass("def");
arr[5] = new MyClass("哈哈");
arr[6] = new MyClass();
arr[7] = new MyClass();
arr[8] = new MyClass();
arr[9] = new MyClass();
// 对前 10 个对象进行排序
Arrays.sort(arr, 0, 10);
// 对后续 10 个对象赋值
for (int i = 10; i < arr.length; i++) {
arr[i] = new MyClass("xyz");
}
// 输出排序结果
for (MyClass obj : arr) {
System.out.println(obj.getStr());
}
}
}
```
在上面的示例代码中,我们在自定义类中增加了一个无参构造方法,用于初始化成员变量为 ""。对于数组长度为 20,但只对前 10 个进行有参构造,其余进行无参构造,并对后续 10 个对象赋值的情况,我们先对前 10 个对象进行排序,然后对后续 10 个对象赋值。最后,输出排序结果。
需要注意的是,对于上述情况,我们只对前 10 个对象进行排序,并且使用了中文拼音比较器,因此只有前 10 个对象中的英语单词和汉字会按照中文拼音顺序排序,后续 10 个对象的排序顺序与排序方式无关。
阅读全文