当前位置:首页 > 单片机 > 架构师社区
[导读]作者:蓝笔头链接:https://www.jianshu.com/p/f3e64e70eb1b1.排序1.1数组排序(`java.util.Arrays`)1.1.1基本数据类型排序对整个数组排序public static void sort(int[] a);对部分数组[fro...

作者:蓝笔头
链接:https://www.jianshu.com/p/f3e64e70eb1b

1. 排序

1.1 数组排序(`java.util.Arrays`)

1.1.1 基本数据类型排序
  • 对整个数组排序

public static void sort(int[] a);
  • 对部分数组 [fromIndex, toIndex) 排序

public static void sort(int[] a, int fromIndex, int toIndex);
七种基本类型 intlongshortcharbytefloatdouble(除了 boolean),都支持上述格式的排序 API

1.1.2 对象排序
  • 实现了 java.lang.Comparable 接口的对象。

// 对整个数组排序
public static void sort(Object[] a);
// 对部分数组 [fromIndex, toIndex) 排序
public static void sort(Object[] a, int fromIndex, int toIndex);
  • 通过 java.util.Comparator 排序:

void sort(T[] a, Comparator c); // 对部分数组 [fromIndex, toIndex) 排序 public staticvoid sort(T[] a, int fromIndex, int toIndex, Comparator c); public interface Comparator{ // result < 0:o1 排在 o2 前面 // result == 0:o1 和 o2 的值一样 // result > 0:o1 排在 o2 后面 int compare(T o1, T o2); } " data-snippet-id="ext.3b4fd31d611c03007a2fb4e82c943c31" data-snippet-saved="false" data-codota-status="done" style="font-size: inherit; color: inherit; line-height: inherit;">// 对整个数组排序
public static  void sort(T[] a, Comparatorsuper T> c);
// 对部分数组 [fromIndex, toIndex) 排序
public static  void sort(T[] a, int fromIndex, int toIndex,
                                Comparatorsuper
 T> c)
;

public interface Comparator<T{
    // result < 0:o1 排在 o2 前面
    // result == 0:o1 和 o2 的值一样
    // result > 0:o1 排在 o2 后面
    int compare(T o1, T o2);
}
案例:

() { @Override public int compare(Person o1, Person o2) { return o1.id - o2.id; } }); // 输出: // Solution.Person(id=1) // Solution.Person(id=2) Arrays.stream(persons).forEach(System.out::println); } @AllArgsConstructor @ToString public static class Person { private int id; } } " data-snippet-id="ext.9f53044395f3063f1ff57b840ee3a007" data-snippet-saved="false" data-codota-status="done" style="font-size: inherit; color: inherit; line-height: inherit;">public class Solution {
    public static void main(String[] args) {
        Person[] persons = new Person[2];
        persons[0] = new Person(2);
        persons[1] = new Person(1);

        Arrays.sort(persons, new Comparator() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.id - o2.id;
            }
        });

        // 输出:
        // Solution.Person(id=1)
        // Solution.Person(id=2)
        Arrays.stream(persons).forEach(System.out::println);
    }

    @AllArgsConstructor
    @ToString
    public static class Person {
        private int id;
    }
}
或者使用 lambda 表达式替换 Comparator 匿名类。

{ return o1.id - o2.id; }); " data-snippet-id="ext.4973bc6f1d0213eb013aab093375a4f4" data-snippet-saved="false" data-codota-status="done" style="font-size: inherit; color: inherit; line-height: inherit;">        Arrays.sort(persons, (o1, o2) -> {
            return o1.id - o2.id;
        });

1.2 列表排序(`java.util.Collections`)

  • 排序

> void sort(Listlist); public staticvoid sort(Listlist, Comparator c); public interface Comparator{ // result < 0:o1 排在 o2 前面 // result == 0:o1 和 o2 的值一样 // result > 0:o1 排在 o2 后面 int compare(T o1, T o2); } " data-snippet-id="ext.48d424bc07d1782333e834b6ae0da4ae" data-snippet-saved="false" data-codota-status="done" style="font-size: inherit; color: inherit; line-height: inherit;">public static super T>> void sort(List list);

public static  void sort(List list, Comparatorsuper T> c);

public interface Comparator<T{
    // result < 0:o1 排在 o2 前面
    // result == 0:o1 和 o2 的值一样
    // result > 0:o1 排在 o2 后面
    int compare(T o1, T o2);
}
  • 反转列表元素

public static void reverse(List list);

1.3 二维数组排序(`java.util.Arrays`)

提示:Java 数组也是一种对象

void sort(T[] a, Comparator c); // 案例 Arrays.sort(nums, (int[]a, int[]b) -> a[0] - b[0]); " data-snippet-id="ext.d85d29980807199ad798d55caa97768a" data-snippet-saved="false" data-codota-status="done" style="font-size: inherit; color: inherit; line-height: inherit;">// api
public static  void sort(T[] a, Comparatorsuper T> c);

// 案例
Arrays.sort(nums, (int[]a, int[]b) -> a[0] - b[0]);

2. 二分查找

  • 数组(java.util.Arrays

int binarySearch(T[] a, T key, Comparator c); public staticint binarySearch(T[] a, int fromIndex, int toIndex, T key, Comparator c); " data-snippet-id="ext.f23c7e0970895182c737a49fa0ca175a" data-snippet-saved="false" data-codota-status="done" style="font-size: inherit; color: inherit; line-height: inherit;">public static int binarySearch(int[] a, int key);
public static int binarySearch(int[] a, int fromIndex, int toIndex, int key);

public static int binarySearch(Object[] a, Object key);
public static int binarySearch(Object[] a, int fromIndex, int toIndex, Object key);

public static  int binarySearch(T[] a, T key, Comparatorsuper T> c);
public static  int binarySearch(T[] a, int fromIndex, int toIndex, T key, Comparatorsuper T> c);
  • 列表(java.util.Collections

int binarySearch(List> list, T key); public staticint binarySearch(List list, T key, Comparator c); " data-snippet-id="ext.f8d1fe37f82f9bfa0e5240865d0bfa44" data-snippet-saved="false" data-codota-status="done" style="font-size: inherit; color: inherit; line-height: inherit;">public static  int binarySearch(List extends Comparable super T>> list, T key);

public static  int binarySearch(List extends T> list, T key, Comparator super T> c);

3. 栈(`java.util.Stack`)

  • 创建

Stack stack = new Stack<>();
  • 数据操作

// 往【栈】里面添加一个元素
public E push(E item)

// 往【栈】里面弹出一个元素
public synchronized E pop()
;
  • 条件判断

public synchronized boolean isEmpty();

4. 队列(`java.util.Queue`)

  • 创建(java.util.LinkedList

Queue queue = new LinkedList<>();
  • 数据操作

// 往【队列】里面添加一个元素
boolean add(E e);

// 往【队列】里面弹出一个元素
poll();
  • 条件判断

boolean isEmpty();

5. 堆(`java.util.PriorityQueue`)

提示:Java 里面的优先队列

  • 创建

minHeap = new PriorityQueue<>(); // 创建一个最大堆 PriorityQueuemaxHeap = new PriorityQueue<>(Comparator.reverseOrder()); " data-snippet-id="ext.b81abce1e0996d64116eee23b0b4a398" data-snippet-saved="false" data-codota-status="done" style="font-size: inherit; color: inherit; line-height: inherit;">// 创建一个最小堆
PriorityQueue minHeap = new PriorityQueue<>();

// 创建一个最大堆
PriorityQueue maxHeap = new PriorityQueue<>(Comparator.reverseOrder());
  • 数据操作

// 往【堆】里面添加一个元素
public boolean add(E e);

// 从【堆】里面弹出一个元素
public E poll();

其他工具

  • 降序排序(java.util.Comparator

reversed(); // 反转一个 Comparable 的排序规则 // 比如从【升序】反转为【降序】 public static> ComparatorreverseOrder(); " data-snippet-id="ext.5516f5b09794f57947cbef89383120cd" data-snippet-saved="false" data-codota-status="done" style="font-size: inherit; color: inherit; line-height: inherit;">// 反转一个 Comparator 的排序规则
// 比如从【升序】反转为【降序】
default Comparator reversed();

// 反转一个 Comparable 的排序规则
// 比如从【升序】反转为【降序】
public static super T>> Comparator reverseOrder();
  • 大数(java.math.BigInteger

// 创建一个大数
public static BigInteger valueOf(long val);

// 数据操作
public BigInteger add(BigInteger val);
public BigInteger subtract(BigInteger val);
public BigInteger multiply(BigInteger val);
public BigInteger divide(BigInteger val);
  • 集合(java.util.Collections

ListnCopies(int n, T o); // 反转一个 list 的顺序 public static void reverse(List list); " data-snippet-id="ext.f8838765f10b2f138e21a8d0a0215ea6" data-snippet-saved="false" data-codota-status="done" style="font-size: inherit; color: inherit; line-height: inherit;">// 初始化一个具有 n 个相同元素 o 的 list
public static  List nCopies(int n, T o);

// 反转一个 list 的顺序
public static void reverse(List list);

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭