昨天遇到一个集合排序的问题,要求在list中插入后数据有序,首先考虑使用集合自带的排序方法,但需要把list转成数组,排序后再转回list。后来发现使用插入算法是最省事的,因为既然是在插入里排序,那么在插入前就先找好插入点,插入后序列就是有序的,以此类推。代码贴上:

  1. package com.wulinfeng.io;
  2.  
  3. import java.util.Collections;
  4. import java.util.LinkedList;
  5. import java.util.List;
  6.  
  7. public class SortList {
  8. List<Integer> sSorted = new LinkedList<>();
  9.  
  10. /**
  11. * 插入算法排序
  12. *
  13. * @param e
  14. */
  15. public void add(int e) {
  16. boolean inserted = false;
  17. // 非首次插入需要遍历list,找到比插入值大的数所在索引并插入,后面的元素后移
  18. for (int i = 0; i < sSorted.size(); i++) {
  19. if (e < sSorted.get(i)) {
  20. sSorted.add(i, e);
  21. inserted = true;
  22. break;
  23. }
  24. }
  25. // 没找到值比自己大的插入点,追加到最后
  26. if (!inserted) {
  27. sSorted.add(e);
  28. }
  29. }
  30.  
  31. /**
  32. * 使用集合排序
  33. *
  34. * @param e
  35. * @param useCollections
  36. */
  37. public void add(int e, boolean useCollections) {
  38. if (useCollections) {
  39. // 先插入
  40. sSorted.add(e);
  41. // 再排序
  42. Collections.sort(sSorted);
  43. }
  44. }
  45.  
  46. public static void main(String[] args) {
  47. SortList slist = new SortList();
  48. slist.add(99);
  49. slist.add(3);
  50. slist.add(6);
  51. slist.add(128);
  52.  
  53. System.out.println("插入排序后的list:");
  54. for (Integer i : slist.sSorted) {
  55. System.out.printf("%3d\t", i);
  56. }
  57.  
  58. System.out.println("");
  59.  
  60. slist.add(123, true);
  61. slist.add(45, true);
  62. slist.add(19, true);
  63. slist.add(318, true);
  64.  
  65. System.out.println("集合排序后的list:");
  66. for (Integer i : slist.sSorted) {
  67. System.out.printf("%3d\t", i);
  68. }
  69. }
  70. }

  运行结果:

  1. 插入排序后的list:
  2. 3 6 99 128
  3. 集合排序后的list:
  4. 3 6 19 45 99 123 128 318

LinkedList插入排序实现的更多相关文章

  1. Java _ JDK _ Arrays, LinkedList, ArrayList, Vector 及Stack

    (最近在看JDK源码,只是拿着它的继承图在看,但很多东西不记录仍然印象不深,所以开始记录JDK阅读系列.) (一)Arrays Arrays比较特殊,直接继承自Arrays ->List(Int ...

  2. JAVA-集合类型List(ArrayList、LinkedList)常用操作例子(基础必备)

    package com.net.xinfang.reflect; import java.util.ArrayList; import java.util.Arrays; import java.ut ...

  3. 对比Vector、ArrayList、LinkedList区别

    Vector是Java早期提供的线程安全的动态数组.因为同步是又额外开销的,所以如果不需要线程安全,不建议选择.Vector内部用对象数组保存数据,可以根据需要自动的增加容量,当数组已满时,会创建新的 ...

  4. 直接插入排序(java实现)

    这几天看排序算法,网上大多数排序算法的解释都是“过于专业”,导致一时半会看不明白到底在说什么玩意.现在总结下几大排序算法(java实现) 1.直接插入排序 说的简单点,就是一组无序序列{A1,A2,. ...

  5. 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)

    本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...

  6. To Java程序员:切勿用普通for循环遍历LinkedList

    ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...

  7. Html5 直接插入排序

    直接插入排序算法(Straight Insertion Sort),是排序算法中简单的一种算法,基本思想如下: 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表.即:先将序列的第 ...

  8. 计算机程序的思维逻辑 (39) - 剖析LinkedList

    上节我们介绍了ArrayList,ArrayList随机访问效率很高,但插入和删除性能比较低,我们提到了同样实现了List接口的LinkedList,它的特点与ArrayList几乎正好相反,本节我们 ...

  9. 深入理解java中的ArrayList和LinkedList

    杂谈最基本数据结构--"线性表": 表结构是一种最基本的数据结构,最常见的实现是数组,几乎在每个程序每一种开发语言中都提供了数组这个顺序存储的线性表结构实现. 什么是线性表? 由0 ...

随机推荐

  1. LOJ 一本通一句话题解系列:

    第一部分 基础算法 第 1 章 贪心算法 1):「一本通 1.1 例 1」活动安排:按照结束时间排序,然后扫一遍就可以了. 2):「一本通 1.1 例 2」种树:首先要尽量的往区间重叠的部分种树,先按 ...

  2. HIVE 编写自定义函数UDF

    一 新建JAVA项目 并添加 hive-exec-2.1.0.jar 和hadoop-common-2.7.3.jar hive-exec-2.1.0.jar 在HIVE安装目录的lib目录下 had ...

  3. try中的return语句,在finally前执行还是在finally后执行?

    try中有的return语句,也有finally语句,请问finally是否执行,如果执行的话finally在return前执行还是在return后执行? 答案:finally的内容会执行,并且在re ...

  4. 智课雅思词汇---二十六、形容词后缀-ble

    智课雅思词汇---二十六.形容词后缀-ble 一.总结 一句话总结: assemble 英 [ə'semb(ə)l]  美 [ə'sɛmbl]  vt. 集合,聚集:装配:收集 vi. 集合,聚集 [ ...

  5. activity启动模式之singleInstance

    activity启动模式之singleInstance 一.简介 Log.d("C2", getTaskId()+"");里面的getTaskId()可以获取a ...

  6. 关于绑定的C#代码+转换器

    BindingOperations.SetBinding(                exp, Expander.IsExpandedProperty,                new Bi ...

  7. QQ钱包,微信,京东钱包,百度钱包,支付宝AGENT

    微信Mozilla/5.0 (Linux; Android 7.0; LON-AL00 Build/HUAWEILON-AL00; wv) AppleWebKit/537.36 (KHTML, lik ...

  8. Django进阶Model篇007 - 聚集查询和分组查询

    接着前面的例子,举例聚集查询和分组查询例子如下: 1.查询人民邮电出版社出了多少本书 >>> Book.objects.filter(publisher__name='人民邮电出版社 ...

  9. HDU 4725 建图

    http://acm.hdu.edu.cn/showproblem.php?pid=4725 The Shortest Path in Nya Graph Time Limit: 2000/1000 ...

  10. 常见GAN的应用

    深入浅出 GAN·原理篇文字版(完整)|干货 from:http://baijiahao.baidu.com/s?id=1568663805038898&wfr=spider&for= ...