比较器
Comparator — 在JDK中提供一个接口
java.util.Comparator接口
|-int compare(类型 o1, 类型 o2)
比较其两个参数的顺序。
升序排序规则:
如果o1的某个属性值大于o2的相应属性值,返回正整数值
如果o1的某个属性值小于o2的相应属性值,返回负整数值
如果o1的某个属性值等于o2的相应属性值,返回0
支持、实现该接口的类所创建的对象,称为比较器对象,一定会拥有compare方法
java.util.Collections工具类方法
static void sort(List<T> list)
|-根据其元素的natural ordering对指定的列表进行排序。
static <T> void sort(List<T> list, Comparator<? super T> c)
|-根据指定的比较器引起的顺序对指定的集合列表进行排序。
案例:实现集合列表元素按某个属性值进行排序
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 迭代器接口类型的内部组成:
public interface Iterator
一个集合的迭代器
将集合列表中的元素对象逐个取出,称为迭代.
boolean hasNext()
|-如果迭代指示器 具有更多元素,则返回 true 。
E next()
|-返回迭代指示器中的下一个元素。
default void remove()
|- 从底层集合中删除此迭代器返回的最后一个元素(可选操作)。
-
获取迭代指示器
如果集合支持接口 Iterable (可迭代),则可以获取指向该集合的迭代指示器
java.util.Iterable接口
|-java.util.Collection接口
|-java.util.List接口
|-java.util.ArrayList实现类
可迭代接口Iterable内部的抽象方法:
Iterator<T> iterator()
返回类型为 T元素的迭代器。
示例: java.util.ArrayList支持Iterable接口,因此可以通过该类中的iterator()方法获取ArrayList集合对象的迭代指示器
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);
}
}
}