黑马程序员技术交流社区
标题: 关于集合的一个问题,求大神解答!! [打印本页]
作者: 悠然的我 时间: 2013-12-31 18:43
标题: 关于集合的一个问题,求大神解答!!
本帖最后由 悠然的我 于 2014-1-1 22:36 编辑
自己写的一个反序集合的方法,但是有提示语法错误
public static void myReverse(List<?> list) //带?泛型就提示语法错误,去掉则可以正常运行
{
int max=list.size()-1;
int min=0;
for(min=0;min<max;min++,max--)
{
Object maxObj=list.get(max);
Object minObj=list.get(min);
list.set(max, minObj);//错误就在这,不知道set有什么问题,?不是代表任意类型么,我存Obj怎么也报错呢
list.set(min, maxObj);
}
}
作者: 776699 时间: 2013-12-31 20:15
public static void myReverse(List<?> list)
{
//定义一个集合存,翻转后的对象。
List list1=new ArrayList();
for(int max=list.size()-1;0<=max;max--)
{
list1.add(list.get(max));
}
System.out.println(list1.toString());//打印翻转后的对象。
}
作者: taoge 时间: 2013-12-31 20:47
楼主请注意,用?这种通配符修饰的泛型集合是不能向其中添加数据的,只能从中读数据
作者: 悠然的我 时间: 2014-1-1 22:33
感谢各位的回答:找到jar包中的源码,抄袭版本如下:
public static void myReverse(List<?> list)
{
int size = list.size();
if (size < 18 || list instanceof RandomAccess)
{
for (int i = 0, mid = size >> 1, j = size - 1; i < mid; i++, j--)
swap(list, i, j);
}
else
{
ListIterator fwd = list.listIterator();
ListIterator rev = list.listIterator(size);
for (int i = 0, mid = list.size() >> 1; i < mid; i++)
{
Object tmp = fwd.next();
fwd.set(rev.previous());
rev.set(tmp);
}
}
}
public static void swap(List<?> list, int i, int j)
{
final List l = list;
l.set(i, l.set(j, l.get(i)));
}
swap中的代码根本就是强制转换么,着个粘到我的代码里依然是有警告的。
看来直接set和使用ListIterator 迭代器都是可行的方法。我还以为源码就不会有警告了呢。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |