Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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库的情况下基于linkedList对自己的集合进行排序?_Java_Sorting_Collections_Linked List - Fatal编程技术网

如何在没有任何标准java库的情况下基于linkedList对自己的集合进行排序?

如何在没有任何标准java库的情况下基于linkedList对自己的集合进行排序?,java,sorting,collections,linked-list,Java,Sorting,Collections,Linked List,我基于LinkedList创建了一个集合,并希望对节点进行排序,我如何为集合添加值,在没有任何标准java库的情况下,我怎么能做到这一点? 包ru.matevosyan import java.util.Iterator; import java.util.NoSuchElementException; /** * DynamicSetByLinkedListclass. *创建于2017年5月29日。 *@作者Matevosyan Vardan *@version 1.0

我基于LinkedList创建了一个集合,并希望对节点进行排序,我如何为集合添加值,在没有任何标准java库的情况下,我怎么能做到这一点? 包ru.matevosyan

    import java.util.Iterator;
    import java.util.NoSuchElementException;

/**
 * DynamicSetByLinkedListclass.
*创建于2017年5月29日。 *@作者Matevosyan Vardan *@version 1.0 */

公共类DynamicSetByLinkedList实现IDynamicSetByLinkedList,Iterable{
最后是私有节点;
私有整数大小=0;
私有节点优先;
/**
*构造器。
*/
公共DynamicSetByLinkedList(){
}
/**
*创建以向集合添加值。
*@param value是您在泛型中声明的类型值。
*/
@凌驾
公共无效添加(E值){
如果(!检查重复(值)){
最后链接(值);
}
}
私有布尔校验重复(E值){
Node firstNode=first;
布尔hasdeplicate=false;
对于(int i=0;i1;i++){
firstNode=firstNode.next;
if(firstNode==null){
打破
}
if(firstNode.item.equals(value)){
hasdeplicate=true;
}
}
返回副本;
}
/**
*linkLast将LinkedList节点指定给列表中的最后一个节点,如果它是第一个值,也指定为第一个。
*@param elementValue是值。
*/
私有void linkLast(E elementValue){
Node lastNode=last;
Node newNode=新节点(lastNode,elementValue,null);
last=newNode;
if(lastNode!=null){
lastNode.next=newNode;
}否则{
第一个=新节点;
}
大小++;
如果(大小>1){
sortByHashcode();
}
}
私有无效sortByHashcode(){
**下面是一个排序算法**
}
}
/**
*用于返回集合的大小。
*@返回大小
*/
公共int len(){
返回大小;
}
/**
*类节点描述linkedList条目。
*创建类实例时定义的@param参数。
*/
私有静态类节点{
E项目;
节点前置;
节点下一步;
节点(上一个节点、E元素、下一个节点){
this.prev=prev;
this.item=元素;
this.next=next;
}
}
/**
*从接口Iterable重写迭代器方法。
*@返回迭代器类型的实例。
*/
@凌驾
公共迭代器迭代器(){
返回新的迭代器(){
整数计数=0;
@凌驾
公共布尔hasNext(){
返回(计数<大小)&(最后!=null);
}
@凌驾
公共教育{
计数++;
节点nextNode=first;
if(nextNode!=null&&count>1){
nextNode=nextNode.next;
}
if(nextNode==null | size
如果链表包含基本类型,则可以使用以下方法进行排序:

Collections.sort(list,null);

如果链表包含您创建的类的对象,那么您应该实现一个composator来执行您自己的比较逻辑,因为您的集合将在每个
add()
方法之后进行排序,您需要在列表中找到新元素的位置。看,当您添加第一个元素时,您的集合肯定已排序,因此添加下一个元素只需找到它们的特定位置。因此,您可以使用下一个实现:

private void sortByHashcode() {
    Node<E> node = first;

    while (node != null) {
        if (last.item.hashCode() < node.item.hashCode()) {
            Node<E> tmp = last.prev;
            last.next = node;
            last.prev = node.prev;
            node.prev = last;
            if (last.prev == null) {
                first = last;
            } else {
                last.prev.next = last;
            }
            tmp.next = null;
            last = tmp;
            break;
        }

        node = node.next;
    }
}
private void sortByHashcode(){
节点=第一个;
while(节点!=null){
if(last.item.hashCode()

然而,在我看来,这是一个相当奇怪的收藏。我认为您应该再考虑一下,您可以使用一个标准Java集合(即带有比较器的TreeSet)。你能解释一下你要解决的问题吗?

Java中的集合不能包含基元类型。我的意思是包装类。我想OP需要在没有“标准Java库”的情况下进行排序,所以
集合。排序在这里可能没有帮助。请注意,我想在没有任何标准Java库的情况下进行排序,仅凭本人之手/我认为您应该使用数组,并使用排序算法实现排序逻辑。您希望编写自己的排序方法的目的是什么?只是为了学习?是的,我不知道如何在我自己的集合代码中对节点进行排序我知道如何对ArrayList进行排序,但我想知道如何使用LinkedList进行排序您几乎可以使用任何算法对LinkedList进行排序。你能展示一下你的排序方法或者说你遇到了什么问题吗?谢谢,但是我不明白这行是怎么工作的-last.prev.next=last,这行做什么?如果它不是第一个节点
last.prev!=空
然后我们将最后一个元素放在一个新位置,需要恢复元素链-
last.prev.next=last
更改链接到最后一个元素的上一个元素,该元素现在放在新位置。我建议你画LinkedList工作的机制,或者因为你可能懂俄语,所以你可以阅读。如果你有问题,请毫不犹豫地问他们。谢谢,我已经自己做了,如果你愿意,你可以去。这是我在vk.com的小组,我经常忘记我教过的重要的东西。嗯,我不使用vk.com
private void sortByHashcode() {
    Node<E> node = first;

    while (node != null) {
        if (last.item.hashCode() < node.item.hashCode()) {
            Node<E> tmp = last.prev;
            last.next = node;
            last.prev = node.prev;
            node.prev = last;
            if (last.prev == null) {
                first = last;
            } else {
                last.prev.next = last;
            }
            tmp.next = null;
            last = tmp;
            break;
        }

        node = node.next;
    }
}