A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 悠然的我 于 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);        
        }
}

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

3 个回复

倒序浏览
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());//打印翻转后的对象。
        }

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
楼主请注意,用?这种通配符修饰的泛型集合是不能向其中添加数据的,只能从中读数据
回复 使用道具 举报
感谢各位的回答:找到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 迭代器都是可行的方法。我还以为源码就不会有警告了呢。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马