9.5.3 简单算法
Collections类提供了一些简单而有用的算法。包括寻找一个集合中的最大值,从一个list复制元素到另一个list,提供一堆常量值来填充一个容器,将一个list反序。
为什么连这么简单的算法都要添加到标准库中?大部分程序员都能通过简单的for循环实现这些算法。我们更喜欢用标准库的方法,因为它们产生更易读的代码。看下面for循环实现的算法:
for(int i = 0; i < words.size(); i++)
if(words.get(i).equals("C++")) words.set(i,"Java");
你需要费脑子才能看懂方法的意图,比较一下使用库方法的版本:
Collections.replaceAll(words,"C++","Java");
不动脑子就知道写的什么。
Java SE8添加了默认方法Collections.removeIf和List.replaceAll。你需要提供λ表达式对元素进行检测或转化,例如,若要移除所有短单词并将余下的单词全部转化为小写:
words.removeIf(w -> w.length() <= 3);
words.repalceALl(String::toLowerCase);
java.util.Collections (from version 1.2)
方法 | 描述 |
---|---|
static <T extends Comparable <? super T>> T min(Collection<T> elements) | |
static <T extends Comparable <? super T>> T max(Collection<T> elements) | |
static <T > T min(Collection<T> elements, Comparator< ? super T> c) | |
static <T > T max(Collection<T> elements, Comparator< ? super T> c) | 返回集合中的最大值或最小值 |
static <T> void copy(List<? super T> to, List<T> from) | 复制源List中所有元素至目标List,目标List至少要与源List等长 |
static <T> void fill(List<? super T> l, T value) | 用值value替换所有List元素 |
static <T> boolean addAll(Collection<? super T> c, T… values) | 添加所有values至集合c,若c因此改变,返回ture(from version 5.0) |
static <T> boolean replaceAll(List<T> l, T oldValue, T newValue) | 用newValue替换所有oldValue(from version 1.4) |
static int indexOfSubList(List<?> l,List<?> s ) | from version 1.4 |
static int lastIndexOfSubList(List<?> l,List<?> s ) | 返回l中子列表s的索引位置,若没有等于s的子列表,则返回-1.(from version 1.4) |
static void swap(List<?> l, int i, int j) | 交换给定两索引处的值(from version 1.4) |
static void reverse(List<?> l) | 将List中的元素反序,方法的效率为O(n),n为List长度 |
static void rotate(List<?> l, int d) | 循环右移List中的元素d次,效率为O(n) (from version 1.4) |
static int frequency(Collection<?> c, Object o) | 计数集合c中o的个数(from version 5.0) |
static boolean disjoint(Collection<?> c1, Collection<?> c2) | 若两集合无交集,返回ture(from version 5.0) |
java.util.Collection<T> (from version 1.2)
方法 | 描述 |
---|---|
default boolean removeIf(Predicate<? super E> filter) | 移除集合中所有符合条件的元素(from version 8) |
java.util.List<E> (from version 1.2 )
方法 | 描述 |
---|---|
default void replaceAll(UnaryOperator<E> op) | 对List中所有元素实行操作op(from version 8) |