上次的代码,在C++,C#,C++ cli 中已修改,但忘了修改Java的了,这个版本中是性能是有问题的,在for 迭代 中,每次都调用indexOfNote函数,而应该是 _dnCurr.next。
/**
* 适用于 foreach 语句
* @return
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public Iterator iterator() {
return new Iterator() {
private int m_cursor = -1;
@Override
public T next() {
++m_cursor;
return indexOfNote(m_cursor).data;
}
@Override
public boolean hasNext() {
return m_cursor + 1 < _count;
}
};
}
Java DListNoteEnum_
class DListNoteEnum_<T> implements Iterator<T> {
private DListNote_<T> _dnCurr;
private int _index = -1;
public DListNoteEnum_(DListNote_<T> dn){
_dnCurr = dn;
}
@Override
public boolean hasNext() {
return _dnCurr.next != null;
}
@Override
public T next() {
++ _index;
if( _index > 0){
_dnCurr = _dnCurr.next;
}
return _dnCurr.data;
}
}
Java DList_
public class DList_<T extends Comparable<T>> implements Iterable<T>{
/**
* 排序方式
*/
public enum Sortord_
{
s_min_max, //从小到大
s_max_min, //从大到小
s_null //无排序顺序
}
protected DListNote_<T> _first; //第一个节点
protected DListNote_<T> _last; //最后一个节点
protected int _count; //节点个数
protected Sortord_ _sortord; //排序顺序
/**
* 适用于 foreach 语句
* @return
*/
public Iterator<T> iterator() {
return new DListNoteEnum_<T>(_first);
}
至此:
Java 例子 :
C++例子:
C++ cli例子:
c#例子:
这些例子都完成了,有不对地方请朋友们指正。