JAVA--对集合遍历的方法和比较器Comparator

对集合的遍历

1.使用迭代器遍历数组

public static void main(String[] args) {
   Collection<String> c=new ArrayList<>();
   c.add("方");
   c.add("思");
   c.add("迪");

   Iterator<String> it= c.iterator();
      while(it.hasNext()){
          String s=it.next();
          System.out.println(s);
          it.remove();
      }
}

2.用for( a :c)方法遍历数组

public static void main(String[] args) {
    Collection<String> c = new ArrayList<>();
    c.add("方");
    c.add("思");
    c.add("迪");
    for (String s : c) {//等同于迭代器当中的String s=it.next()
        System.out.println(s);
    }
}

用for循环遍历数组

public static void main(String[] args) {
    List<String> l=new ArrayList<>();
    l.add("f");
    l.add("s");
    l.add("d");
    for(int i=0;i<l.size();i++){
        String s=l.get(i);
        System.out.println(s);
        l.remove(i);
        i--;
    }
    System.out.println(l);
}

比较器Comparator

想要实现一个以Student类型的名字和年龄的排序比较
首先创建一个Student类,定义参数快捷键添加构造方法,getset方法,equals和hashcode方法,tostring方法

public class Student implements Comparable<Student>{
    private String name;
    private  Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Student)) return false;
        Student student = (Student) o;
        return Objects.equals(name, student.name) &&
                Objects.equals(age, student.age);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    public Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public int compareTo(Student o) {
        return this.name.compareTo(o.name);
    }
}

然后在主函数当中去添加调用

public static void main(String[] args) {
    List<Student> c=new ArrayList();
   c.add(new Student("fangsidi",21));
   c.add(new Student("keyuqiang",22));
   c.add(new Student("chenliang",23));
   System.out.println("排序之前"+c);
   MyComparator a=new MyComparator();
    Collections.sort(c,a);
    System.out.println("字典排序之后"+c);
    // Collections.sort(c, new Comparator<Student>() {
        // @Override
        // public int compare(Student o1, Student o2) {
            // if(o1.getName().length()==o2.getName().length()){
                 //Collections.sort(c);
            // }
            // else{
                 //return o1.getName().length()-o2.getName().length();
            // }
        // }
     //});
    System.out.println("长短排序之后"+c);
}

用实现类去实现Comparator接口

public class MyComparator implements Comparator<Student>{
    @Override
    public int compare(Student o1, Student o2) {
        return o1.getAge()-o2.getAge();
    }
}

这样就是按照年龄大小 并且升序排序,如若降序,则只需改变o1和o2的位置即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值