浅谈Java中的集合存储数据后,输出数据的有序和无序问题

 更新时间:2020年09月25日 09:08:55   作者:G_66  
这篇文章主要介绍了浅谈Java中的集合存储数据后,输出数据的有序和无序问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

HashSet , TreeSet , 无序是指存储数据的顺序和取出数据的顺序不一致;但是TreeSet 是按照指定的顺序排个序出来;

如果,我们想按照数据输入的顺序依次输出数据(即,如果依次输入4、1、7、3,输出时依次是4、1、7、3),此时需要用LinkedHashMap ,LinkedHashSet

package Demo;
import java.util.*;
import java.util.Map.*; 
public class DemoMap {
 public static void main(String[] args) {
 
 text3();
 System.out.println("==========================================");
 text4();
 } 
 public static void text3(){
 Map<Integer,String> DemoMap=new HashMap<Integer,String>();
 DemoMap.put(4, "dddd");
 DemoMap.put(1, "a");
 DemoMap.put(3, "ccc");
 DemoMap.put(2, "bb");
 
 Iterator<Map.Entry<Integer , String>> it =DemoMap.entrySet().iterator();
 while(it.hasNext()){
  System.out.println(it.next()); 
 }
 
 }
 public static void text4(){
 Map<Integer,String> DemoMap=new LinkedHashMap<Integer,String>();
 DemoMap.put(4, "dddd");
 DemoMap.put(1, "a");
 DemoMap.put(3, "ccc");
 DemoMap.put(2, "bb");
 
 Iterator<Map.Entry<Integer , String>> it =DemoMap.entrySet().iterator();
 while(it.hasNext()){
  System.out.println(it.next()); 
 }
 }
 }

运行结果为:

补充知识:java数组实现针对一个有序的数组插入一个数据并保持数组有序

1,排序介绍

针对这个问题,其实可以看做是插入排序中的有序排序。简单的介绍哈,插入排序的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。

2,思路分析

可分为三种情况来考虑,第一种头插法也就是将数据插入到数组的第一个,这种情况插入的数据是最大值或最小值。第二种情况是将数据插入到数组中,插入的数组取值范围在最大值与最小值之间。第三种情况的也就是尾插法,插入的数据是最大值或最小值。

第一种头插法

输入有序数组:arr ={2,3,6,89}

插入的记录(数据):1

输出插入数据的有序数组:arr ={1,2,3,6,89}

第二种插入数组之间

有序数组:arr ={2,3,6,89}

插入的记录(数据):5

返回的有序数组:arr ={2,3,5,6,89}

第二种尾插法

有序数组:arr ={2,3,6,89}

插入的记录(数据):100

返回的有序数组:arr ={2,3,6,89,100}

3,java代码实现

package sort;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * project_name: JavaDemo
 * filename: InsertSort
 * IDE:  IntelliJ IDEA
 * author: ganxiang
 * CreateDate:2020-07-18 16:04
 */
public class InsertSort {

  //头插法
  private List insertHead(int [] arr,int data){
    int len =arr.length;
    int [] a =new int[len+1];
    int k=0;
    if (data<=arr[0]) a[k]=data;
    for (int i = 0; i <=len-1 ; i++) {
      k+=1;
      a[k]=arr[i];
    }
    List<Integer> list =new ArrayList<>();
    for (int num:a) {
      list.add(num);
    }
    return list;
  }
  //插入数据到数组之中
  private List insertBody(int [] arr,int data){
    int len =arr.length;
    int [] a =new int[len+1];
    int k=0;//通过移动k插入数据
    for (int i = 0; i <=len-1 ; i++) {
     if(data>=arr[i]&&data<=arr[i+1]){
       a[k]=arr[i];
       k+=1;
       a[k]=data;
       i+=1;
       k+=1;
     }
     a[k]=arr[i];
     k+=1;
    }
//    System.out.println(Arrays.toString(a));
    List<Integer> list =new ArrayList<>();
    for (int num:a) {
      list.add(num);
    }
    return list;
  }
  //尾插法
  private List insertTial(int [] arr,int data) {
    int len = arr.length;
    int[] a = new int[len + 1];
    int k = 0;
    for (int i = 0; i <= len - 1; i++) {
      a[k] = arr[i];
      k += 1;
    }
    if (data >= arr[len - 1]) a[k] = data;
    List<Integer> list = new ArrayList<>();
    for (int num : a) {
      list.add(num);
    }
    return list;
  }
  public static void main(String[] args) {
    int [] arr ={2,3,6,89};
    System.out.println("输入的有序数组arr为:"+Arrays.toString(arr));
    System.out.println("1,头插法插入数据1后的有序数组为:"+new InsertSort().insertHead(arr,1));
    System.out.println("2,在数组之中插入数据5后有序的数组为:"+new InsertSort().insertBody(arr,5));
    System.out.println("3,尾插法插入数据100后的有序数组为:"+new InsertSort().insertTial(arr,100));
  }
}

4,运行结果

以上这篇浅谈Java中的集合存储数据后,输出数据的有序和无序问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • break和continue的作用和区别解析(案例分析)

    break和continue的作用和区别解析(案例分析)

    break和continue都是用来控制循环结构的,主要作用是停止循环,这篇文章主要介绍了break和continue的作用和区别,需要的朋友可以参考下
    2023-03-03
  • Java实体类实现链式操作实例解析

    Java实体类实现链式操作实例解析

    这篇文章主要介绍了Java实体类实现链式操作实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • java如何实现递归删除树形数据的任一个节点

    java如何实现递归删除树形数据的任一个节点

    文章讲述了在Java中实现递归删除树形数据的任一个节点时需要注意的三个点,包括删除的节点包含子节点、删除子节点和其他子节点删除的节点不包含子节点、以及该父节点变成叶子节点,此外,文章还提到这两件事包含在同一件事务中
    2024-12-12
  • Java Web开发环境配置详解

    Java Web开发环境配置详解

    这篇文章主要介绍了Java Web开发环境配置详解,对初学者是个必备的过程,有需要的可以了解一下
    2016-11-11
  • jdk中密钥和证书管理工具keytool常用命令详解

    jdk中密钥和证书管理工具keytool常用命令详解

    keytool JAVA是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务
    2014-01-01
  • Java中JDK动态代理的超详细讲解

    Java中JDK动态代理的超详细讲解

    JDK 的动态代理是基于拦截器和反射来实现的,JDK代理是不需要第三方库支持的,只需要JDK环境就可以进行代理,下面这篇文章主要给大家介绍了关于Java中JDK动态代理的超详细讲解,需要的朋友可以参考下
    2022-10-10
  • java GUI编程之paint绘制操作示例

    java GUI编程之paint绘制操作示例

    这篇文章主要介绍了java GUI编程之paint绘制操作,结合实例形式详细分析了java GUI编程paint绘制相关操作技巧与使用注意事项,需要的朋友可以参考下
    2020-01-01
  • 详解Java 打印堆栈的几种方法

    详解Java 打印堆栈的几种方法

    本篇文章主要介绍了Java 打印堆栈的几种方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • springboot 集成easy-captcha实现图像验证码显示和登录

    springboot 集成easy-captcha实现图像验证码显示和登录

    本文主要介绍了springboot 集成easy-captcha实现图像验证码显示和登录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 简述Java中的四种引用类型

    简述Java中的四种引用类型

    从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用,下面分别介绍下这四种引用。
    2021-04-04

最新评论