根据
javadoc … Collections.fill()编写如下:
public static <T> void fill(List<? super T> list,T obj) { int size = list.size(); if (size < FILL_THRESHOLD || list instanceof RandomAccess) { for (int i=0; i<size; i++) list.set(i,obj); } else { ListIterator<? super T> itr = list.listIterator(); for (int i=0; i<size; i++) { itr.next(); itr.set(obj); } } }
很容易理解他们为什么不使用listIterator
if (size < FILL_THRESHOLD || list instanceof RandomAccess)
条件为RandomAccess.但是使用尺寸< FILL_THRESHOLD在上面? 我的意思是,与使用尺寸> = FILL_THRESHOLD的迭代器相比,没有任何显着的性能优势,而不是尺寸< FILL_THRESHOLD? 我也看到了Collections.copy()的相同方法:
public static <T> void copy(List<? super T> dest,List<? extends T> src) { int srcSize = src.size(); if (srcSize > dest.size()) throw new indexoutofboundsexception("Source does not fit in dest"); if (srcSize < copY_THRESHOLD || (src instanceof RandomAccess && dest instanceof RandomAccess)) { for (int i=0; i<srcSize; i++) dest.set(i,src.get(i)); } else { ListIterator<? super T> di=dest.listIterator(); ListIterator<? extends T> si=src.listIterator(); for (int i=0; i<srcSize; i++) { di.next(); di.set(si.next()); } } }
供参考:
private static final int FILL_THRESHOLD = 25; private static final int copY_THRESHOLD = 10;
以下相同的方法:
public static void reverse(List<?> list) public static void shuffle(List<?> list,Random rnd)
编辑:
我的困惑是大小< FILL_THRESHOLD部分,而不是RandomAccess
解决方法
原文地址:https://www.jb51.cc/java/128780.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。