栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java中的排序数组列表

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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]


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485711.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号