Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 包含空元素的排序数组_Java_Arrays_Sorting_Nullpointerexception - Fatal编程技术网

Java 包含空元素的排序数组

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()。我相信它会完成这项工作。删除空元素并

我有一个大小为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];
    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()排序,而可能不避免修复问题,您应该考虑列表或数组上的其他集合不使用异常。