1. List排序的调用
Collections.sort() --> Arrays.sort --> MergeSort()
2. 两种排序策略:Comparable 和 Comparator
public static <T> void sort(List<T> list, Comparator<? super T> c) {
Object[] a = list.toArray();
Arrays.sort(a, (Comparator)c);
ListIterator i = list.listIterator();
for (int j=0; j<a.length; j++) {
i.next();
i.set(a[j]);
}
}
Comparator
是在外面定义的排序策略,类似于策略模式,可以传递进去
不同的策略实现。
public static <T extends Comparable<? super T>> void sort(List<T> list) {
Object[] a = list.toArray();
Arrays.sort(a);
ListIterator<T> i = list.listIterator();
for (int j=0; j<a.length; j++) {
i.next();
i.set((T)a[j]);
}
}
Comparable
是实体类中实现的方法。
3. Comparable的定义
public interface Comparable<T> {
public int compareTo(T o);
}
4. Comparator的定义
public interface Comparator<T> {
int compare(T o1, T o2);
}
分享到:
相关推荐
除了Lambda,JDK8还引入了方法引用和构造器引用,它们可以直接引用类的方法或构造器,进一步简化代码,例如`Arrays.sort(list, Integer::compareTo)`。 **4. Stream API** Stream API是JDK8的一大亮点,它提供了...
3. **方法引用来替代lambda**:除了lambda表达式,还可以使用方法引用,如`Collections.sort(names, String::compareToIgnoreCase)`,这会调用`compareToIgnoreCase`方法来排序列表。 4. **Optional类**:为了解决...
在JDK1.8中,可以通过方法引用来代替Lambda表达式,如 `Arrays.sort(array, Integer::compareTo)`。方法引用可以是类::静态方法、实例::实例方法或Class::方法,这样可以使代码更加清晰和简洁。 四、Optional类 ...
2. **方法引用来代替匿名内部类**:可以用方法引用替换某些lambda表达式,如`Arrays.sort(list, Comparator.comparing(Person::getAge))`。 3. **流API(Stream API)**:`java.util.stream`包提供了处理集合的新...
这进一步减少了代码量,如`Arrays::sort`或`String::length`。 4. **Stream API** Stream API是处理集合数据的新方式,提供了链式操作,如过滤、映射和归约,适用于大量数据的处理。流可以是串行的,也可以并行的...
这使得代码更简洁,如`Arrays.sort(list, String::compareTo)`。 4. **默认方法** 在接口中引入了默认方法,允许接口提供默认实现。这种特性使得在不破坏向后兼容性的前提下,可以为已有的接口添加新的方法。例如...
这在处理高阶函数时非常有用,如`Arrays.sort()`和`Stream.map()`。 此外,JDK 1.8还增强了日期和时间API,引入了`java.time`包,替代了之前易用性较差的`java.util.Date`和`java.util.Calendar`。新API更直观,更...
对于数组,Java 7新增了`Arrays.copyOfRange()`方法,可以方便地复制数组的一部分到新数组。此外,`Collections.sort()`方法现在也可以对并行数组进行排序,提升了性能。 JDK1.7还增强了枚举类型,允许枚举实现多个...
例如,`Arrays.sort(names, String::compareToIgnoreCase)` 使用了`String`类的`compareToIgnoreCase`方法。 3. **默认方法**:在接口中可以定义带有实现的默认方法,这使得接口可以增加新的功能而不破坏现有的实现...
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); List<String> filteredNames = names.stream() .filter(name -> name.startsWith("A")) .collect(Collectors.toList()); ``` ### 4. 接口的默认...
例如,`List<String> list = Arrays.asList("a", "b", "c"); list.sort(String::compareTo);` 这里的`String::compareTo`就是一个方法引用,它等价于使用Lambda `(String s1, String s2) -> s1.compareTo(s2)`。 三...
- **多路归并排序**:JDK7中的`Arrays.sort()`和`Collections.sort()`方法使用了新的多路归并排序算法,提高了排序性能。 - **Fork/Join框架**:用于并行执行任务,提高计算密集型任务的执行效率。 - **元空间**...
比如,`Arrays::sort` 可以直接用于排序操作,而无需创建额外的比较器。 另外,JDK 1.8还增加了日期时间API的全面改革。新的`java.time`包取代了过时的`java.util.Date`和`java.util.Calendar`,提供了更加强大且...
1. **泛型的改进**:在JDK 1.6中,泛型的类型推断能力得到了增强,使得编写代码更加简洁,如`Arrays.sort()`方法现在可以对自定义类型的数组进行排序。 2. **枚举类型(Enum)的增强**:JDK 1.6支持枚举的比较,...
例如,`Arrays.sort()`可以使用`Comparator.comparing()`方法引用,简化比较逻辑。 3. **接口默认方法** 在JDK 1.8中,接口可以拥有默认方法,用`default`关键字定义。这使得接口可以提供默认实现,而不会破坏现有...
Collections.sort(names, String::compareToIgnoreCase); ``` ### Stream API Stream API是JDK8中的一个重大创新,它提供了对集合进行高效、声明式处理的能力。开发者可以通过链式调用来过滤、映射、聚合数据,使得...
2. **多路归并排序**:Java 7在`java.util.Arrays.sort()`方法中实现了多路归并排序,提高了大规模数据的排序效率。 3. **钻石操作符**:在创建匿名内部类或者泛型实例时,可以省略类型参数,编译器会根据上下文...
例如,`Arrays.sort(list, Integer::compareTo)`,这使得代码更加清晰。 3. **默认方法**: - Java 8允许在接口中定义带有默认实现的函数,这使得接口可以扩展而不会破坏现有的实现。它在增加新功能时提供了更大的...
例如,`Arrays.sort()`方法现在可以接受一个Comparator的lambda表达式,用于自定义排序规则。 2. **Stream API**:Stream API提供了一种新的处理数据的方式,类似于SQL查询,但适用于内存中的数据。它支持集合操作...
例如,`Arrays.sort(list, Comparator.comparing(Person::getName))`。 4. **Stream API**:Stream API是Java 8中的核心特性,它提供了处理集合的新方式,支持并行处理和数据管道。可以进行过滤、映射、归约等操作...