IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 【Java】通过重写Comparable和Comparator对数组和集合进行排序 -> 正文阅读

[游戏开发]【Java】通过重写Comparable和Comparator对数组和集合进行排序

【Java】实现Comparable和Comparator接口对数组和集合进行排序

数组排序

原数组:

String[] words = {"xbc","pcxbcf","xb","cxbc","pcxbc"};

Arrays.sort(Object[] a)

使用的条件是数组元素类型要实现Comparable接口,然后该方法就能按照重写的compareTo方法进行排序。

String类型的compareTo方法:

public int compareTo(String anotherString) {
    int len1 = value.length;
    int len2 = anotherString.value.length;
    int lim = Math.min(len1, len2);
    char v1[] = value;
    char v2[] = anotherString.value;

    int k = 0;
    while (k < lim) {
        char c1 = v1[k];
        char c2 = v2[k];
        if (c1 != c2) {
            return c1 - c2;
        }
        k++;
    }
    return len1 - len2;
}

进行排序并打印结果:

Arrays.sort(words);
for(int i = 0 ; i < words.length; i++) {
    System.out.print(words[i] + ",");
}

因为String的compareTo方法是比较ascii码值,所以是按大小写排序,排序结果如下:

cxbc,pcxbc,pcxbcf,xb,xbc,

Arrays.sort(T[] a, Comparator<? super T> cmp)

使用的条件是自定义一个Comparator的实现类,然后该方法就能按照重写的compare方法进行排序。

我们自定义一个比较字符串长度的Comparator:

public class StringLengthComparator implements Comparator<String> {
    @Override
    public int compare(String o1, String o2) {
        return o1.length() - o2.length();
    }
}

进行排序并打印结果:

Arrays.sort(words, new StringLengthComparator());
for(int i = 0 ; i < words.length; i++) {
    System.out.print(words[i] + ",");
}

结果按照字符串长度排序:

xb,xbc,cxbc,pcxbc,pcxbcf,

集合排序

Collections.sort(List list)

使用的条件是T要实现Comparable接口,然后该方法就能按照重写的compareTo方法进行排序。

Collections.sort(List list, Comparator<? super T> c)

使用的条件是自定义一个Comparator的实现类,然后该方法就能按照重写的compare方法进行排序。

List.sort(Comparator<? super E> c)

用法同Collections.sort

思想和数组是一样的,这里我们把words转为List,用这几个方法排序并打印结果:

String[] words = {"xbc","pcxbcf","xb","cxbc","pcxbc"};
List<String> list = Arrays.asList(words);
for(int i = 0 ; i < list.size(); i++) {
    System.out.print(list.get(i) + ",");
}
System.out.println("\n");

Collections.sort(list);
for(int i = 0 ; i < list.size(); i++) {
    System.out.print(list.get(i) + ",");
}
System.out.println("\n");

Collections.sort(list, new StringLengthComparator());
for(int i = 0 ; i < list.size(); i++) {
    System.out.print(list.get(i) + ",");
}
xbc,pcxbcf,xb,cxbc,pcxbc,

cxbc,pcxbc,pcxbcf,xb,xbc,

xb,xbc,cxbc,pcxbc,pcxbcf,

转换

Arrays.sort的参数必须是数组,Collections.sort的参数必须是List,所以想得到其它类型容器的排序结果需要先将它们转为数组或List再排序。

数组转List

可以用Arrays.asList(零散同类型对象/数组)

String[] words = {"xbc","pcxbcf","xb","cxbc","pcxbc"};
List<String> list = Arrays.asList(words);

Set转List

可以用new ArrayList<>(set)

Set<String> set = new HashSet<>();
List<String> list = new ArrayList<>(set);

List,Set转数组

可以用Collection.toArray()

String[] words1 = (String[]) set.toArray();
String[] words2 = (String[]) list.toArray();
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:27:58  更:2021-09-12 13:29:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 12:54:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码