当前位置:首页 > 公众号精选 > 架构师社区
[导读]作者:蓝笔头链接: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);

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

北京2024年4月16日 /美通社/ -- 4月13日至14日,第二十届中国人力资源服务业高峰论坛和第十届亚太人力资源技术与服务博览会在深圳举办。会上同步发布"第十届亚太人力资源服务奖",众合云科凭借在跨地域用工合规和S...

关键字: 数字化 SAAS API

基于 NVIDIA Jetson 平台进行开发的 1 万多家公司现在可以利用全新的生成式 AI、API 和微服务来加快推进行业数字化

关键字: 机器人 生成式 AI API

爱立信发布全球首个为开发者与企业提供通信和网络API的商业化运营商合作 API平台将为运营商开辟网络投资变现新途径,并驱动移动基础设施投资 北京2023年9月22日 /美通社/ -- 近日,爱立信利用网络...

关键字: API 爱立信 网络 德国电信

(全球TMT2023年9月5日讯)由全球云通信平台Infobip英富必赞助、全球领先IT市场研究和咨询公司IDC发布了题为《利用对话式商务的力量重塑用户体验》的最新市场研究,重点介绍了在亚太地区,人工智能驱动的对话式商...

关键字: 人工智能 PAAS 电子 API

马萨诸塞州剑桥市2023年8月4日  /美通社/ -- Akamai Technologies, Inc.(纳斯达克股票代码:AKAM)是一家致力于支持并...

关键字: API SECURITY AI BSP

北京——2023年7月13日 亚马逊云科技日前宣布推出金融支付加密服务Amazon Payment Cryptography,为支付处理类应用程序提供加密及密钥功能,简化客户在处理借记卡、信用卡和储值卡的支付应用过程中为...

关键字: 密钥 API 亚马逊云科技

北京2023年3月2日 /美通社/ -- 2023世界移动通信大会(MWC2023)期间,爱立信总裁兼首席执行官鲍毅康(Börje Ekholm)在GSMA会议中发表演讲。鲍毅康指出,"数字化十年&q...

关键字: 数字化 爱立信 5G API

据业内信息报道,近日 OpenAI 正式开放了 ChatGPT API,允许第三方开发者将 ChatGPT 集成到自己的应用程序和服务中,开发人员也可以灵活地选择特定版本。

关键字: OpenAI ChatGPT API

Orange、西班牙电信和沃达丰与爱立信及Vonage一起展示如何向全球开发者社区开放,并让该社区方便使用先进的移动网络功能。 此次在世界移动通信大会期间的演示是一座行业里程碑。运营商在GSMA开放式网关倡议框...

关键字: 开发者 应用开发 5G网络 API

北京2023年2月24日 /美通社/ -- 近期全球母基金协会于瑞士苏黎世发布了"2022全球最佳投资机构榜单"。CE Innovation Capital(简称"CEiC")以优...

关键字: IC CE TOP API
关闭
关闭