import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
@SuppressWarnings("serial")
public class ReversibleArrayList<T> extends ArrayList<T> {
public ReversibleArrayList(Collection<T> c) {
super(c);
} public Iterable<T> reversed() {
return new Iterable<T>() {
public Iterator<T> iterator() {
return new Iterator<T>() {
int current = size() - 1; public boolean hasNext() {
return current > -1;
} public T next() {
return get(current--);
} public void remove() { // Not implemented
throw new UnsupportedOperationException();
}
};
}
};
}
}这个java类的reversed() 方法的写法没见过,哪位大哥能帮忙解释下,说下原理啊,包括里面的每句话。
import java.util.Collection;
import java.util.Iterator;
@SuppressWarnings("serial")
public class ReversibleArrayList<T> extends ArrayList<T> {
public ReversibleArrayList(Collection<T> c) {
super(c);
} public Iterable<T> reversed() {
return new Iterable<T>() {
public Iterator<T> iterator() {
return new Iterator<T>() {
int current = size() - 1; public boolean hasNext() {
return current > -1;
} public T next() {
return get(current--);
} public void remove() { // Not implemented
throw new UnsupportedOperationException();
}
};
}
};
}
}这个java类的reversed() 方法的写法没见过,哪位大哥能帮忙解释下,说下原理啊,包括里面的每句话。
解决方案 »
- 如何把编译好的Jar文件转为可执行文件(请详细写明)
- 创建一个线程的时候到底要不要set name呢
- 小弟求助一道JAVA问题
- httpclient提交数据到网站的时候,怎么解决中文乱码问题?
- 在java中有没有象delphi中的BDE,不用连数据库,直接可以做查询
- 急!jbuilder中怎样生成excel文件或报表文件并将数据存入数据库中?在线等!
- 哪里有电子版的《java2核心技术》呀?
- 关于记录集的问题
- 送分!大家好!小弟初来此处,还望大家多多关照
- 有没有高人用过freejava,拜托,帮个忙!
- 请问,JAVA中如何写调用sql server的存储过程代码?
- SWT中FileDialog属性
List和Set实现了Collection接口,其中带有add(),romove(),retainAll()等一些方法
主要是这总方式不理解, 一般都是 new ClassName();
后面没有带{}
new Iterator <T>() {}是实现了new Iterable <T>() { }中的的一个匿名的内部类
我想是这样的吧
Iterable <T>是种泛型集合,表示集合中只能放入T这种类型的数据
public static void main(String[] args) {
ReversibleArrayList<String> ral = new ReversibleArrayList<String>(
Arrays.asList("To be or not to be".split(" ")));
// Grabs the ordinary iterator via iterator():
for (String s : ral)
System.out.print(s + " ");
System.out.println();
// Hand it the Iterable of your choice
for (String s : ral.reversed())
System.out.print(s + " ");
}
}这是它的测试类,单步调试看到了他的运行过程,怎么看都看不懂
public Iterable <T> reversed() {
return new Iterable <T>() {
public Iterator <T> iterator() {
return new Iterator <T>() {
int current = size() - 1;//得到当前arraylist的大小 public boolean hasNext() { //判断是否有下一个值
return current > -1;
} public T next() { //得到下一个值
return get(current--);
} public void remove() {
throw new UnsupportedOperationException(); // 不可删除元素
}
};
}
};
}
reversed()方法返回一个迭代器,而返回的这个迭代器有一个重载的迭代方法iterator(),而这个迭代方法iterator()返回该ArrayList的一个自定义的迭代器实际上就是完成了ReversibleArrayList 类的迭代器方法