java类库的简单算法

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学习库
有任何问题直接联系我,一起学习吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值