1. 程式人生 > 程式設計 >淺談Java中的集合儲存資料後,輸出資料的有序和無序問題

淺談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>> it =DemoMap.entrySet().iterator();
 while(it.hasNext()){
  System.out.println(it.next()); 
 }
 }
 }

執行結果為:

淺談Java中的集合儲存資料後,輸出資料的有序和無序問題

補充知識:java陣列實現針對一個有序的陣列插入一個數據並保持陣列有序

1,排序介紹

針對這個問題,其實可以看做是插入排序中的有序排序。簡單的介紹哈,插入排序的基本思想是將一個記錄插入到已經排好序的有序表中,從而一個新的、記錄數增1的有序表。

2,思路分析

可分為三種情況來考慮,第一種頭插法也就是將資料插入到陣列的第一個,這種情況插入的資料是最大值或最小值。第二種情況是將資料插入到陣列中,插入的陣列取值範圍在最大值與最小值之間。第三種情況的也就是尾插法,插入的資料是最大值或最小值。

第一種頭插法

輸入有序陣列:arr ={2,3,6,89}

插入的記錄(資料):1

輸出插入資料的有序陣列:arr ={1,2,89}

第二種插入陣列之間

有序陣列:arr ={2,89}

插入的記錄(資料):5

返回的有序陣列:arr ={2,5,89}

第二種尾插法

有序陣列:arr ={2,89}

插入的記錄(資料):100

返回的有序陣列:arr ={2,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,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中的集合儲存資料後,輸出資料的有序和無序問題

以上這篇淺談Java中的集合儲存資料後,輸出資料的有序和無序問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。