Java 包含空元素的排序数组
我有一个大小为1000的字符串数组:Java 包含空元素的排序数组,java,arrays,sorting,nullpointerexception,Java,Arrays,Sorting,Nullpointerexception,我有一个大小为1000的字符串数组: String[] subStrStore = new String[1000]; 我在数组中只有6个元素。如果我使用以下方法对其进行排序: Arrays.sort(subStrStore); 我得到一个空指针异常,因为它试图比较空元素。如何解决这个问题?看看java.util.Arrays中的Arrays.copyOf()。我相信它会完成这项工作。看看java.util.Arrays中的Arrays.copyOf()。我相信它会完成这项工作。删除空元素并
String[] subStrStore = new String[1000];
我在数组中只有6个元素。如果我使用以下方法对其进行排序:
Arrays.sort(subStrStore);
我得到一个空指针异常,因为它试图比较空元素。如何解决这个问题?看看java.util.Arrays中的Arrays.copyOf()。我相信它会完成这项工作。看看java.util.Arrays中的Arrays.copyOf()。我相信它会完成这项工作。删除空元素并进行排序
String[] subStrStore = new String[1000];
subStrStore[10] = "f";
subStrStore[200] = "e";
subStrStore[300] = "d";
subStrStore[500] = "c";
subStrStore[750] = "b";
subStrStore[900] = "a";
String[] sorted = Stream.of(subStrStore)
.filter(s -> s != null)
.sorted()
.toArray(String[]::new);
System.out.println(Arrays.toString(sorted));
// -> [a, b, c, d, e, f]
删除空元素并进行排序
String[] subStrStore = new String[1000];
subStrStore[10] = "f";
subStrStore[200] = "e";
subStrStore[300] = "d";
subStrStore[500] = "c";
subStrStore[750] = "b";
subStrStore[900] = "a";
String[] sorted = Stream.of(subStrStore)
.filter(s -> s != null)
.sorted()
.toArray(String[]::new);
System.out.println(Arrays.toString(sorted));
// -> [a, b, c, d, e, f]
如果字符串是可以使用的前6个元素
Arrays.sort(subStrStore, 0, 6);
如果字符串是可以使用的前6个元素
Arrays.sort(subStrStore, 0, 6);
我认为最好的方法是在比较之前检查元素。诸如此类:
if(object == null){break;}
仅当您使用数组的第一个元素时,此操作才有效。
1,2,3,4空,空。。。x1000。不是1,2,空,空,3,4,5 我认为最好的方法是在比较之前检查元素。诸如此类:
if(object == null){break;}
仅当您使用数组的第一个元素时,此操作才有效。
1,2,3,4空,空。。。x1000。不是1,2,空,空,3,4,5 使用自定义比较器
Arrays.sort(subStrStore, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1 == o2)
return 0;
if (o1 == null) {
return -1;
}
if (o2 == null) {
return 1;
}
return o1.compareTo(o2);
}
});
Arrays.sort(子存储,新比较器(){
@凌驾
公共整数比较(字符串o1、字符串o2){
如果(o1==o2)
返回0;
如果(o1==null){
返回-1;
}
如果(o2==null){
返回1;
}
返回o1。与(o2)相比;
}
});
这将推送数组末尾的所有空值使用自定义比较器
Arrays.sort(subStrStore, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1 == o2)
return 0;
if (o1 == null) {
return -1;
}
if (o2 == null) {
return 1;
}
return o1.compareTo(o2);
}
});
Arrays.sort(子存储,新比较器(){
@凌驾
公共整数比较(字符串o1、字符串o2){
如果(o1==o2)
返回0;
如果(o1==null){
返回-1;
}
如果(o2==null){
返回1;
}
返回o1。与(o2)相比;
}
});
这将推送数组末尾的所有空值,并将其调整为大小,或者使用有序集合。您可以编写自己的比较器来处理空值,并使用带有比较器()的排序版本,或者如果非空项位于块中,则可以使用带有开始和结束索引的排序()虽然可能无法避免修复您的问题,但您应该考虑列表或数组上的其他集合有一个列表和修剪大小,或者使用有序集合。您可以编写自己的比较器来处理空值,并使用比较器()来排序版本,或者,如果非NULL的条目在块中,则可以使用Soad和EndoTindex()排序,而可能不避免修复问题,您应该考虑列表或数组上的其他集合不使用异常。