Java之Collections使用


Collections提供了哪些操作呢?

一、查询操作
1.查找元素
binarySearch(List<? extends Comparable<? super T>> list, T key)
binarySearch(List<? extends T> list, T key, Comparator<? super T> c)

看方法名就知道它是用的二分查找

注意:

集合中元素是没有经过排序,那么结果是未知的
另外,排序的元素必须实现排序接口(Comparable)或者比较器接口(Comparator)。

List<String> str = new ArrayList<String>();
str.add("b");
str.add("c");
str.add("a");

System.out.println(Collections.binarySearch(str, "a")); //返回-1, 即没有找到

现在调整一下顺序:

str.add("b");
str.add("a");
str.add("c");

System.out.println(Collections.binarySearch(str, "a")); //返回1
2.集合中最大/最小元素
 // 查找元素最大值
 <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
                                        <T> T max(Collection<? extends T> coll, Comparator<? super T> comp)

// 查找元素最小值
<T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll)
<T> T min(Collection<? extends T> coll, Comparator<? super T> comp)

注意:

排序的元素要实现排序接口(Comparable)或者比较器接口(Comparator)哦

\\ 基本类型
str.add("b");
str.add("a");
str.add("c");

System.out.println(Collections.max(str)); //c
System.out.println(Collections.min(str)); //a
\\ 自定义类
public class Person implements Comparable<Person>{ //实现Comparable接口

    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public int compareTo(Person person){ //实现compareTo方法
        return this.age - person.age;
    }
}
Person p1 = new Person("Zzzz", 40);
Person p2 = new Person("Kkkk", 30);
Person p3 = new Person("Mmmm", 50);

ArrayList<Person> al = new ArrayList<Person>();
al.add(p1);
al.add(p2);
al.add(p3);

System.out.println(Collections.max(al).getName()); //Mmmm
System.out.println(Collections.min(al).getName()); //Kkkk
3.集合中的是否存在子集合
static int indexOfSubList(List<?> source, List<?> target) //子集合是首次出现的索引
static int lastIndexOfSubList(List<?> source, List<?> target) //子集合最后一次出现的索引

根据源码解释,它使用的是暴力匹配的方式。

4.集合中是否有相同的元素,没有返回true
boolean disjoint(Collection<?> c1, Collection<?> c2)

Source code ~

//关键实现
for (Object e : iterate) {
    if (contains.contains(e)) {
        // Found a common element. Collections are not disjoint.
         return false;
     }
 }
5.返回元素在集合中出现的次数
int frequency(Collection<?> c, Object o)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值