면접을 위해 기본 ADT 자료를 다시 살펴보고 내가있는 동안 자바를 배우면서 두 마리의 새를 죽이려고합니다. 병합 정렬에 대한 간단한 알고리즘을 일반 연결 목록 (직접 작성)으로 작성하려고합니다. 처음 상상했던 것보다 훨씬 어려워졌습니다! 누구든지 나를 도울 수 있습니까? 나는 기초 작업을 밖으로 시작하고 난에 더 먹을수록이 게시물을 업데이트합니다Java generic arguments
다음과 같이 일반 연결리스트에 대한 나의 코드는 다음과 같습니다. 내가 다른이 클래스에 액세스하려고
public class NodeList<T extends Comparable<T> > {
private T head;
public NodeList<T> tail;
public NodeList(T item, NodeList<T> list) {
head = item;
tail = list;
}
}
을 다음과 내가 만든 클래스 :
public class MyList<T extends Comparable<T>> {
private NodeList<T> nodes;
private static int size;
public MyList() {
nodes = null;
}
public MyList(T[] array){
for(T item : array) {
nodes = new NodeList<T>(item, nodes);
}
size = array.length;
}
public void add(T item) {
nodes = new NodeList<T>(item, nodes);
size++;
}
public void addEnd(T item) {
NodeList<T> temp = nodes;
while (temp == null || temp.tail != null) {
temp = temp.tail;
}
size++;
temp.tail = new NodeList<T> (item, null);
}
저는 믿습니다, 지금까지, 모든이의 목록의 시작과 끝으로 일반적인를 추가해야하는 추가 및 가산 방법까지 보정 할 수 목록입니다.
내 코드는 계속 :
public static <S extends Comparable<S>>
MyList<S> sort(MyList<S> list) {
if (size > 1) {
MyList<S> left = leftHalf(list);
MyList<S> right = rightHalf(list);
list = merge(left, right);
}
return list;
}
private static <S extends Comparable<S>>
MyList<S> merge(MyList<S> left, MyList<S> right) {
}
private static <S extends Comparable<S>>
MyList<S> leftHalf(MyList<S> list) {
MyList <S> leftSide = new MyList();
int middle;
if(size % 2 == 1) {
middle = size +1;
} else {
middle = size;
}
for (int countToMiddle = 0; countToMiddle < middle ; countToMiddle++) {
leftSide.addEnd(nodes);
}
// return elements from 0 .. list.size()/2
}
그리고 오류 얻을 :
addEnd(S) in MyList cannot be applied to (NodeList)
내가
이leftSide.addEnd(nodes);
사람이 이유를 볼 수/말 실행할 때 발생 내 일의이 시점까지 내가 맞으면 나? 다시 한번 고마워요! 당신이 Comparable
를 사용하는 경우 대체
public class NodeList<T extends Comparable> {
또는
public class NodeList<T extends Comparable<T>> {
: 그리고 당신은 단지 Comparable
항목을 포함 할 수있는 NodeList와 myList를 원하는 경우
'T'와 'Comporable'의 관계에 대해 생각해보십시오. – PeterT
질문의 두 번째 버전은'MyList leftSide'가'MyList
leftSide'이어야합니다. 원시 타입을 포함한 경고를 없애라. (나는 그것이 현재의 JDK6에 있다고 생각한다.) –불행히도, 수정 된 편집, 여전히 MyList에서 addEnd (S) 오류가 발생했습니다.
(NodeList)에 적용 할 수 없습니다! 다시 한번 감사드립니다 :) –