【发布时间】:2015-05-05 18:55:18
【问题描述】:
我在课堂上学习java,需要对一个双向链表进行排序,我得到了代码,它可以工作,但是当我在我的环境中使用代码时,我收到一个错误:
DoubleLinkedListSort 类型中的方法 sort(DoubleLinkedList
) 不适用于参数 (DoubleLinkedList - )
这是我在这里得到的课程:https://stackoverflow.com/a/2938529/4611395
刚刚将 List 类更改为我的 DoubleLinkedList 类。 所以,我就用这种方式。
DoubleLinkedList<Item> it = new DoubleLinkedList<Item>();
it = DoubleLinkedListSort.sort( it );
如果我将通用 T 更改为我的类 Item,它可以正常工作。 有谁知道为什么会出现这个问题?我知道它应该可以工作。
谢谢。
编辑:
这是我编辑的 DoubleLinkedListSort。
package list;
import list.DoubleLinkedList;
public class DoubleLinkedListSort
{
private static int depth = 0;
public static <T extends Comparable<T>> DoubleLinkedList<T> sort( DoubleLinkedList<T> Ts )
{
depth++;
String tabs = getTabs();
System.out.println( tabs + "Sorting: " + Ts );
if( Ts.listSize() <= 1 )
{
depth--;
return Ts;
}
DoubleLinkedList<T> left = new DoubleLinkedList<T>();
DoubleLinkedList<T> right = new DoubleLinkedList<T>();
DoubleLinkedList<T> result = new DoubleLinkedList<T>();
int middle = Ts.listSize() / 2;
int added = 0;
for( int i = 0; i < Ts.listSize(); i++ )
{
try
{
if( added++ < middle )
left.insertFirst( Ts.getElementAtPosition( i ) );
else
right.insertFirst( Ts.getElementAtPosition( i ) );
}
catch( DoubleLinkedListException d )
{
}
}
left = sort( left );
right = sort( right );
result = merge( left, right );
System.out.println( tabs + "Sorted to: " + result );
depth--;
return result;
}
private static <T extends Comparable<T>> DoubleLinkedList<T> merge( DoubleLinkedList<T> left, DoubleLinkedList<T> right )
{
String tabs = getTabs();
System.out.println( tabs + "Merging: " + left + " & " + right );
DoubleLinkedList<T> result = new DoubleLinkedList<T>();
while( left.listSize() > 0 && right.listSize() > 0 )
{
try
{
if( left.getElementAtPosition( 0 ).compareTo( right.getElementAtPosition( 0 ) ) < 0 )
{
result.insertLast( left.getElementAtPosition( 0 ) );
left.deleteElementAtPosition( 0 );
}
else
{
result.insertLast( right.getElementAtPosition( 0 ) );
right.deleteElementAtPosition( 0 );
}
}
catch( DoubleLinkedListException d )
{
}
}
try
{
if( left.listSize() > 0 )
{
for( int i = 0; i < left.listSize(); i++ )
{
result.insertLast( left.getElementAtPosition( i ) );
}
}
else
{
for( int i = 0; i < right.listSize(); i++ )
{
result.insertLast( right.getElementAtPosition( i ) );
}
}
}
catch( DoubleLinkedListException d )
{
}
return result;
}
private static String getTabs()
{
StringBuffer sb = new StringBuffer( "" );
for( int i = 0; i < depth; i++ )
sb.append( '\t' );
return sb.toString();
}
}
编辑 2:
正如Method with generics don't accept class as argument 和https://stackoverflow.com/a/30061121/4611395 评论的那样,它只是实现了 Comparable 并且有效。
public class Item implements Comparable<Item>
.
.
.
@Override
public int compareTo( Item it )
{
return this.name.compareTo( it.name );
}
谢谢大家的帮助。
【问题讨论】:
-
Item需要实现Comparable<Item>。 -
格里菲狗抢走了我的风头。这就是答案。看看你的链接代码: public static
> List sort(List list) { ... } -
将相关代码放入您的问题中。在这种情况下,相关代码是类声明和方法声明的标题。
-
请将您正在使用的代码的当前版本复制到此问题中。
-
您刚刚从一些 Stack Overflow 答案中复制了您的代码?这不会教你太多东西。