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

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

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭