ArrayList实现排序与迭代

比较器

Comparator — 在JDK中提供一个接口

  1. java.util.Comparator接口
    1. |-int compare(类型 o1, 类型 o2)
      1. 比较其两个参数的顺序。
      2. 升序排序规则:
        1. 如果o1的某个属性值大于o2的相应属性值,返回正整数值
        2. 如果o1的某个属性值小于o2的相应属性值,返回负整数值
        3. 如果o1的某个属性值等于o2的相应属性值,返回0
  2. 支持、实现该接口的类所创建的对象,称为比较器对象,一定会拥有compare方法

java.util.Collections工具类方法

  1. static void sort(List<T> list)
    1. |-根据其元素的natural ordering对指定的列表进行排序。
  2. static <T> void sort(List<T> list, Comparator<? super T> c)
    1. |-根据指定的比较器引起的顺序对指定的集合列表进行排序。

案例:实现集合列表元素按某个属性值进行排序 

import java.util.*;
public class MainApp {
    public static void main(String[] args) {
        // 添加一组商品
        Product p1 = new Product(1, "小米手机", 3999.99, "数码");
        Product p2 = new Product(2, "华为手环", 199.00, "数码");
        Product p3 = new Product(3, "三星笔记本", 6999.99, "数码");
        Product p4 = new Product(4, "洗衣机", 999, "家电");
        Product p5 = new Product(5, "花生油", 190.99, "食品");
        Product p6 = new Product(6, "茶杯", 99.00, "生活用品");
        // 创建集合添加商品
        List<Product> prodList = new ArrayList<>();
        prodList.add(p1);
        prodList.add(p2);
        prodList.add(p3);
        prodList.add(p4);
        prodList.add(p5);
        prodList.add(p6);
        // 排序前的集合
        System.out.println("排序前的集合列表: ");
        System.out.println("---------------------------------------------------");
        for (Product product : prodList) {
            System.out.println(product);
        }
        // 按价格升序排
        // java.util.Collections 集合工具类
        //创建比较器对象--使用匿名内部类
        Comparator<Product> c = new Comparator<Product>(){
             // 升序的比较规则 
             // 如果o1的某个属性值大于o2的相应属性值,返回正整数值 
             //如果o1的某个属性值小于o2的相应属性值,返回负整数值
             //如果o1的某个属性值等于o2的相应属性值,返回0
            public int compare(Product o1, Product o2) {
                if (o1.getPrice() > o2.getPrice()) {
                    return 1;
                } else if (o1.getPrice() < o2.getPrice()) {
                    return -1;
                } else {
                    return 0;
                }
            }
        };
        // java.util.Collections 集合工具类的sort方法,根据给定的比较器对集合排序
        Collections.sort(prodList, c);
        //使用给定集合对象调用sort()排序 
        //prodList.sort(c);
        System.out.println("\n排序后的集合列表: ");
        System.out.println("---------------------------------------------------");
        for (Product product : prodList) {
            System.out.println(product);
        }
    }
}

迭代器

  • java.util.Iterator 迭代器接口类型的内部组成:

  1. public interface Iterator
    1. 一个集合的迭代器
  2. 将集合列表中的元素对象逐个取出,称为迭代.
  3. boolean hasNext()
    1. |-如果迭代指示器 具有更多元素,则返回 true 。
  4. E next()
    1. |-返回迭代指示器中的下一个元素。
  5. default void remove()
    1. |- 从底层集合中删除此迭代器返回的最后一个元素(可选操作)。
  • 获取迭代指示器

 

  1. 如果集合支持接口 Iterable (可迭代),则可以获取指向该集合的迭代指示器
    1. java.util.Iterable接口
      1. |-java.util.Collection接口
        1. |-java.util.List接口
          1. |-java.util.ArrayList实现类
  2. 可迭代接口Iterable内部的抽象方法:
    1. Iterator<T> iterator()
      1. 返回类型为 T元素的迭代器。
  3. 示例: java.util.ArrayList支持Iterable接口,因此可以通过该类中的iterator()方法获取ArrayList集合对象的迭代指示器
  4. Iterator<Product> iter = prodList.iterator();

案例:使用ArrayList的迭代指示器遍历集合 

public class MainApp {
    public static void main(String[] args) {
        // 添加一组商品
        Product p1 = new Product(1, "小米手机", 3999.99, "数码");
        Product p2 = new Product(2, "华为手环", 199.00, "数码");
        Product p3 = new Product(3, "三星笔记本", 6999.99, "数码");
        Product p4 = new Product(4, "洗衣机", 999, "家电");
        Product p5 = new Product(5, "花生油", 190.99, "食品");
        Product p6 = new Product(6, "茶杯", 99.00, "生活用品");
        Product p7 = new Product(7, "电视机", 2999.00, "家电");
        // 创建集合添加商品
        List<Product> prodList = new ArrayList<>();
        prodList.add(p1);
        prodList.add(p2);
        prodList.add(p3);
        prodList.add(p4);
        prodList.add(p5);
        prodList.add(p6);
        prodList.add(p7);
        System.out.println("方式1: 遍历集合列表-传统for: ");
        System.out.println("---------------------------------------------------");
        for (int i = 0; i < prodList.size(); i++) {
            System.out.println(prodList.get(i));
        }
        System.out.println("\n方式2: 遍历集合列表-增强for: ");
        System.out.println("---------------------------------------------------");
        for (Product product : prodList) {
            System.out.println(product);
        }
        System.out.println("\n方式3: 遍历集合列表-使用Iterator迭代器: ");
        System.out.println("---------------------------------------------------");
        //获取指向集合列表对象的迭代指示器对象
        Iterator<Product> iter = prodList.iterator();
        while(iter.hasNext()){ //判断迭代指示器是否有下一个元素
            //获取迭代指示器指向下一个元素
            Product product = iter.next();
            System.out.println(product);
        }
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值