java集合框架提供了一些有用的算法。在下面的总结中,你将会了解如何使用这些算法,以及如何编写适用于集合框架的你自己的算法
1、排序与混排
排序:Collections类中的sort方法可以对实现了List接口的集合进行排序。
sort方法假定列表实现了Comparable接口。如果想采用其他方式对列表排序,可以使用List接口的sort方法并传入一个Comparator对象。如下按工资对一个员工列表排序;
//以某值进行升序
staff.sort(Comparator. comparing(Employee::getSalary)))
//降序
staff.sort(Comparator.reverseOrder());
/逆序
staff.sort(Comparator.reverseOrder().reversed());
混排:Collections类中有一个算法shuffle,其功能与排序相反,他会随机的混排列表中元素的顺序。
Demo样例
public class TestCollections {
public static void main(String[] args) {
List a = Arrays.asList(1,3,2,5,99);
System.out.println("初始的列表:" + a);
a.sort(Comparator.reverseOrder());
System.out.println("reverseOrder降序的列表:" + a);
a.sort(Comparator.reverseOrder().reversed());
System.out.println("reversed逆序:"+a);
Collections.shuffle(a);
System.out.println("shuffle混乱排序:"+a);
}
}
2、二分查找
规则:在一个有序的集合中,检查中间的元素,查看是否大于要查找的元素,大于就在后半段找,反之前半段找,以此类推直到找到元素。例如数组中1024个元素,10步之后就能找到匹配元素,而线性查找平均需要512步。
Collections.binarySearch()方法实现了这个算法,注意:集合必须是有序的,否则算法会返回错误的答案。
//想要查找某个元素,必须提供集合以及要查找的元素
i=Collections.binarySearch(c,element);
//如果集合没有采用Comparable接口的ComparaTo方法进行排序,那么还要提供一个比较器对象
i=Collections.binarySearch(c,element,comparator);
如果binarySearch方法返回一个非负的值,这表示匹配对象的索引。如果为负值,则表示没有匹配元素。
3、简单算法
Collections类中包含了集合简单但很有用的算法;
java.util.Collections
//1、将所有的值添加到给定的集合中,如果集合改变了,则返回true
static <T> boolean addAll(Collection<? super T> c, T... elements)
//2、用newVal替换所有值为oldVal的元素
static <T> boolean replaceAll(List<T> list, T oldVal, T newVal)
//3、返回c中与对象o相等的元素的个数
static int frequency(Collection<?> c, Object o)
//4、如果两个集合没有共同的元素,则返回true
static boolean disjoint(Collection<?> c1, Collection<?> c2)
java.util.Collection<T>
//删除所有匹配的元素
default boolean removeIf(Predicate<? super E> filter)
关注微信公众号:java学习库
有任何问题直接联系我,一起学习吧。