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

网友投稿 389 2022-11-20


浅谈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 DemoMap=new HashMap();

DemoMap.put(4, "dddd");

DemoMap.put(1, "a");

DemoMap.put(3, "ccc");

DemoMap.put(2, "bb");

Iterator> it =DemoMap.entrySet().iterator();

while(it.hasNext()){

System.out.println(it.next());

}

}

public static void text4(){

Map DemoMap=new LinkedHashMap();

DemoMap.put(4, "dddd");

DemoMap.put(1, "a");

DemoMap.put(3, "ccc");

DemoMap.put(2, "bb");

Iterator> it =DemoMap.entrySet().iterator();

whilexjYQdTw(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 http://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 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 http://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 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 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,运行结果


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:给你的MyBatis
下一篇:使用Java 实现一个“你画手机猜”的小游戏
相关文章

 发表评论

暂时没有评论,来抢沙发吧~