9.5.3 简单算法

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值