去重排序List(Java实现)
来源:互联网 发布:农夫抢购软件怎么样 编辑:程序博客网 时间:2024/05/29 18:18
去重排序List(Java实现)
- 去重排序ListJava实现
- 需求描述
- 链式实现
- 本机性能测试结果
- 其他尝试
需求描述
对于顺序产生的一系列整数进行去重排序。
链式实现
//去重自排序链表public class AscendingIntegerList { private int size = 0; private Node first; public AscendingIntegerList() { } public void add(int index) { Node node = first; Node lastNode = null; int temp = 0; while(node != null) { temp = node.i.intValue(); if(temp < index) { lastNode = node; node = node.next; } else if(temp == index) { //重复元素直接跳过 return; } else { break; } } insertAfter(lastNode, index); } private void insertAfter(Node node, Integer i) { Node newNode = new Node(i, null); if(node == null) { newNode.next = first; first = newNode; } else { newNode.next = node.next; node.next = newNode; } size++; } public int size() { return size; } public void clear() { for(Node x = first; x != null; ) { Node next = x.next; x.i = null; x.next = null; x = next; } first = null; size = 0; } public static class Node { Integer i; Node next; Node(Integer i, Node next) { this.i = i; this.next = next; } } //返回一个迭代器供外部进行遍历 public Iterator<Integer> listIterator() { return new ListItr(); } private class ListItr implements Iterator<Integer> { private Node lastReturned = null; private Node next; ListItr() { next = first; } public boolean hasNext() { return next != null; } public Integer next() { if (!hasNext()) throw new NoSuchElementException(); lastReturned = next; next = next.next; return lastReturned.i; } public void remove() { //we do nothing. } }}
本机性能测试结果:
- 最初考虑尝试链表实现,是因为链表插入元素开销小。
- 以上算法的性能问题在于频繁创建节点(Node)和计算新增节点的插入位置,应对大量数据时算法效率低。
其他尝试
后来采用ArrayList存储+折半查找计算插入位置 性能更好。
- 折半查找优化插入位置的计算
- ArrayList批量自动扩容
- 唯一担心的在于需要对插入位置后面的元素进行“整体搬家”,ArrayList采用System.arraycopy效率还是蛮高的。
0 0
- 去重排序List(Java实现)
- Java Set转List,排序,去重
- list去重排序
- List排序去重
- List去重排序
- List 去重(java)
- list排序,list去重
- 一行代码实现java list去重
- 一行代码实现java list去重
- 一行代码实现java list去重
- Java实现对List去重
- java list去重操作实现方式
- 一行代码实现java list去重
- java list 去重
- java list去重
- java list去重
- java list 去重
- JAVA list 去重
- Android静态安全检测 -> 主机名弱校验
- JSF导航
- sitemesh3-springMVC配置
- TelephonyManager的基本用法,只是看到了玩一下
- VisualVM 远程监控jmx程序
- 去重排序List(Java实现)
- 基于原生PHP的路由分配实现
- 练习用到的网络 路径
- 使用librtmp进行H264与AAC直播
- SQLSERVER中rollup、cube、grouping用法
- hdu3709: Balanced Number
- 跟着我左手右手一个慢动作,轻松提交AppStore(AppStore提交App流程最新超详细攻略)(付费篇)
- PopupWindow百度地图API普通地图与卫星地图切换
- UITableView实现选择框和编辑状态时cell向右移动的自定义方法