我想要的是我想要排序一个由二进制数组成的数组,即{0,01,001,110,1},然后排序后的答案应该是java中的{0,1,01,001,110}。它还必须根据长度。
答案 0 :(得分:3)
您要求的并不是二进制数字的真正排序。我猜你的数组是一个String数组?
你可以实现一个首先比较字符串长度的比较器,如果它们相等,则将数字转换为字节或整数并比较这些值。
代码示例:
import java.util.Arrays;
import java.util.Comparator;
public class BinaryStringComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
// check input
if (!o1.matches("[01]*") || !o2.matches("[01]*")) {
throw new IllegalArgumentException("Only strings representing binary values are allowed");
}
// compare lengths first
if (o1.length() < o2.length()) {
return -1;
}
if (o1.length() > o2.length()) {
return 1;
}
// compare values if the length is equal
final int i1 = Integer.parseInt(o1, 2);
final int i2 = Integer.parseInt(o2, 2);
return Integer.compare(i1, i2);
}
public static void main(String[] args) {
// input was {0,01,001,110,1}
String[] input = { "0", "01", "001", "110", "1" };
Arrays.sort(input, new BinaryStringComparator());
System.out.println(Arrays.toString(input));
}
}