Object max(Collection, Comparator):根据 Comparator 指定的顺序,返回给定集合的最大元素, 具体如下(返回长度最大的元素):
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * @author 兴趣使然黄小黄 * @version 1.0 */ public class CollectionsTest { public static void main(String[] args) { List list = new ArrayList(); list.add("drunk"); list.add("abc"); list.add("king"); Object max = Collections.max(list, new Comparator() { @Override public int compare(Object o1, Object o2) { return ((String)o1).length() - ((String)o2).length(); } }); System.out.println(max); } }
min()方法与该方法使用方式类似,不再赘述。
1.2.2 frequency()
int frequency(Collection, Object):返回指定集合中指定元素出现的次数。 具体如下:
import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * @author 兴趣使然黄小黄 * @version 1.0 */ public class CollectionsTest { public static void main(String[] args) { List list = new ArrayList(); list.add("drunk"); list.add("abc"); list.add("abc"); list.add("abc"); list.add("king"); int abc = Collections.frequency(list, "abc"); System.out.println("abc 出现的次数: " + abc); } }
1.2.3 copy()
void copy(List dest, List src):将 src 中的内容复制到 dest 中。 但是需要注意的是,直接copy会抛出数组越界异常,来看下面的例子,尝试将list的数据复制到dest中:
我们追进 Collection 工具类的 copy() 源码: 发现,如果新的list大小比原来需要复制的list小,则直接抛出异常!
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()); } } }
为了完成 copy 操作,首先我们需要给 dest 进行赋值,使其大小和 list 相同。 具体如下:
import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * @author 兴趣使然黄小黄 * @version 1.0 */ public class CollectionsTest { public static void main(String[] args) { List list = new ArrayList(); list.add("drunk"); list.add("abc"); list.add("king"); List dest = new ArrayList(); for (int i = 0; i < list.size(); i++) { dest.add(""); } Collections.copy(dest, list); System.out.println("list = " + list); System.out.println("dest = " + dest); } }
1.2.4 replaceAll()
boolean replaceAll(List list, Object oldVal, Object newVal):使用新值替换 list 对象中所有的旧值。 具体如下:替换所有的abc为祢豆子
import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * @author 兴趣使然黄小黄 * @version 1.0 */ public class CollectionsTest { public static void main(String[] args) { List list = new ArrayList(); list.add("drunk"); list.add("abc"); list.add("abc"); list.add("abc"); list.add("king"); System.out.println("原list = " + list); Collections.replaceAll(list, "abc", "祢豆子"); System.out.println("新list = " + list); } }