如何获得单链表以排序十六进制数

时间:2016-01-04 11:18:02

标签: java

您好我有这个代码将按顺序对字符串列表进行排序,我也可以将数组排序为升序,因为有很多教程可以帮助我。我遇到的问题是用附加的字母对数字进行排序。这可能吗?这是我到目前为止所拥有的。

DictReader

}

2 个答案:

答案 0 :(得分:1)

可以对任何类型的Comparable元素进行排序。

如果您使用String作为值,则将使用字符串的自然顺序对其进行排序。如果您需要不同的比较政策,则需要编写Comparator并使用它来比较值而不是直接比较它们

public static Node insertInOrder(Comparator<String> comparator) {
    Node current = getNode(inFile.next());
    Node first = current, last = current;
    while (inFile.hasNext()) {
        if (first != null && comparator.compare(current.value, first.value) < 0) {
            current.next = first;
            first = current;
        } else if (last != null && comparator.compare(current.value, last.value) > 0) {
            last.next = current;
            last = current;
        } else {
            Node temp = first;
            while (comparator.compare(current.value, temp.value) < 0){
                temp = temp.next;
            }
            current.next = temp.next;
            temp.next = current;
        }
        current = getNode(inFile.next());
    }
    return first;
}

答案 1 :(得分:0)

我认为,您需要使用int类的以下方法存储与String value对应的其他数据Integer数据项,

public static int parseInt(String s,int radix) throws NumberFormatException

其中radix = 16。然后你可以将它排序为普通整数(基数为10)。

您需要更改Node课程,以int代替String

public static class Node {
    public int value;
    public Node next;
}

然后在您的getNode(String element)方法中,执行十六进制字符串转换为int

    public static Node getNode(String element) {
        Node temp = new Node();
        try{

temp.value = Integer.parseInt(element,16);
}catch(NumberFormatException ex){
ex.printStackTrace();
}
        temp.next = null;
        return temp;
    }

现在,您可以修改insertInOrder()方法,将其作为简单整数进行比较,&gt; ,&lt; ,==等而不是value.compareTo