Java中的排序数组列表

Java中的排序数组列表,第1张

Java中的排序数组列表 简约解决方案

这是一个“最小”的解决方案。

class SortedArrayList<T> extends ArrayList<T> {    @SuppressWarnings("unchecked")    public void insertSorted(T value) {        add(value);        Comparable<T> cmp = (Comparable<T>) value;        for (int i = size()-1; i > 0 && cmp.compareTo(get(i-1)) < 0; i--) Collections.swap(this, i, i-1);    }}

插入以线性时间运行,但是无论如何,这将是您使用ArrayList获得的结果(插入元素右侧的所有元素都必须以一种或另一种方式移动)。

插入一些不可比较的结果会导致ClassCastException。(这也是采用的方法

PriorityQueue

依赖自然顺序的优先级队列也不允许插入不可比较的对象(这样做可能会导致ClassCastException)。

覆写
List.add

请注意,以排序的方式覆盖

List.add
(或
List.addAll
为此)插入元素将
直接违反接口规范 。您 可以 做的是重写此方法以引发
UnsupportedOperationException

来自的文档

List.add

boolean add(E e)

将指定的元素追加到此列表的末尾(可选 *** 作)。

同样的道理也适用于这两个版本

add
,两个版本的
addAll
set
。(根据列表界面,所有这些都是可选 *** 作。)

一些测试
SortedArrayList<String> test = new SortedArrayList<String>();test.insertSorted("ddd");    System.out.println(test);test.insertSorted("aaa");    System.out.println(test);test.insertSorted("ccc");    System.out.println(test);test.insertSorted("bbb");    System.out.println(test);test.insertSorted("eee");    System.out.println(test);

....打印:

[ddd][aaa, ddd][aaa, ccc, ddd][aaa, bbb, ccc, ddd][aaa, bbb, ccc, ddd, eee]


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5477849.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-12

发表评论

登录后才能评论

评论列表(0条)

    保存