淺談Java中的集合存儲(chǔ)數(shù)據(jù)后,輸出數(shù)據(jù)的有序和無序問題
HashSet , TreeSet , 無序是指存儲(chǔ)數(shù)據(jù)的順序和取出數(shù)據(jù)的順序不一致;但是TreeSet 是按照指定的順序排個(gè)序出來;
如果,我們想按照數(shù)據(jù)輸入的順序依次輸出數(shù)據(jù)(即,如果依次輸入4、1、7、3,輸出時(shí)依次是4、1、7、3),此時(shí)需要用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());
}
}
}
運(yùn)行結(jié)果為:

補(bǔ)充知識(shí):java數(shù)組實(shí)現(xiàn)針對(duì)一個(gè)有序的數(shù)組插入一個(gè)數(shù)據(jù)并保持?jǐn)?shù)組有序
1,排序介紹
針對(duì)這個(gè)問題,其實(shí)可以看做是插入排序中的有序排序。簡單的介紹哈,插入排序的基本思想是將一個(gè)記錄插入到已經(jīng)排好序的有序表中,從而一個(gè)新的、記錄數(shù)增1的有序表。
2,思路分析
可分為三種情況來考慮,第一種頭插法也就是將數(shù)據(jù)插入到數(shù)組的第一個(gè),這種情況插入的數(shù)據(jù)是最大值或最小值。第二種情況是將數(shù)據(jù)插入到數(shù)組中,插入的數(shù)組取值范圍在最大值與最小值之間。第三種情況的也就是尾插法,插入的數(shù)據(jù)是最大值或最小值。
第一種頭插法
輸入有序數(shù)組:arr ={2,3,6,89}
插入的記錄(數(shù)據(jù)):1
輸出插入數(shù)據(jù)的有序數(shù)組:arr ={1,2,3,6,89}
第二種插入數(shù)組之間
有序數(shù)組:arr ={2,3,6,89}
插入的記錄(數(shù)據(jù)):5
返回的有序數(shù)組:arr ={2,3,5,6,89}
第二種尾插法
有序數(shù)組:arr ={2,3,6,89}
插入的記錄(數(shù)據(jù)):100
返回的有序數(shù)組:arr ={2,3,6,89,100}
3,java代碼實(shí)現(xiàn)
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;
}
//插入數(shù)據(jù)到數(shù)組之中
private List insertBody(int [] arr,int data){
int len =arr.length;
int [] a =new int[len+1];
int k=0;//通過移動(dòng)k插入數(shù)據(jù)
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("輸入的有序數(shù)組arr為:"+Arrays.toString(arr));
System.out.println("1,頭插法插入數(shù)據(jù)1后的有序數(shù)組為:"+new InsertSort().insertHead(arr,1));
System.out.println("2,在數(shù)組之中插入數(shù)據(jù)5后有序的數(shù)組為:"+new InsertSort().insertBody(arr,5));
System.out.println("3,尾插法插入數(shù)據(jù)100后的有序數(shù)組為:"+new InsertSort().insertTial(arr,100));
}
}
4,運(yùn)行結(jié)果

以上這篇淺談Java中的集合存儲(chǔ)數(shù)據(jù)后,輸出數(shù)據(jù)的有序和無序問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Java 實(shí)現(xiàn)Redis存儲(chǔ)復(fù)雜json格式數(shù)據(jù)并返回給前端
- java8中NIO緩沖區(qū)(Buffer)的數(shù)據(jù)存儲(chǔ)詳解
- Java字節(jié)與字符流永久存儲(chǔ)json數(shù)據(jù)
- 淺談java 數(shù)據(jù)處理(int[][]存儲(chǔ)與讀取)
- 相冊(cè)管理系統(tǒng)(Java表單+xml數(shù)據(jù)庫存儲(chǔ))
- JSON復(fù)雜數(shù)據(jù)處理之Json樹形結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)Java對(duì)象并存儲(chǔ)到數(shù)據(jù)庫的實(shí)現(xiàn)
- java實(shí)現(xiàn)表格數(shù)據(jù)的存儲(chǔ)
相關(guān)文章
break和continue的作用和區(qū)別解析(案例分析)
break和continue都是用來控制循環(huán)結(jié)構(gòu)的,主要作用是停止循環(huán),這篇文章主要介紹了break和continue的作用和區(qū)別,需要的朋友可以參考下2023-03-03
Java實(shí)體類實(shí)現(xiàn)鏈?zhǔn)讲僮鲗?shí)例解析
這篇文章主要介紹了Java實(shí)體類實(shí)現(xiàn)鏈?zhǔn)讲僮鲗?shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
java如何實(shí)現(xiàn)遞歸刪除樹形數(shù)據(jù)的任一個(gè)節(jié)點(diǎn)
文章講述了在Java中實(shí)現(xiàn)遞歸刪除樹形數(shù)據(jù)的任一個(gè)節(jié)點(diǎn)時(shí)需要注意的三個(gè)點(diǎn),包括刪除的節(jié)點(diǎn)包含子節(jié)點(diǎn)、刪除子節(jié)點(diǎn)和其他子節(jié)點(diǎn)刪除的節(jié)點(diǎn)不包含子節(jié)點(diǎn)、以及該父節(jié)點(diǎn)變成葉子節(jié)點(diǎn),此外,文章還提到這兩件事包含在同一件事務(wù)中2024-12-12
Java中JDK動(dòng)態(tài)代理的超詳細(xì)講解
JDK 的動(dòng)態(tài)代理是基于攔截器和反射來實(shí)現(xiàn)的,JDK代理是不需要第三方庫支持的,只需要JDK環(huán)境就可以進(jìn)行代理,下面這篇文章主要給大家介紹了關(guān)于Java中JDK動(dòng)態(tài)代理的超詳細(xì)講解,需要的朋友可以參考下2022-10-10
springboot?集成easy-captcha實(shí)現(xiàn)圖像驗(yàn)證碼顯示和登錄
本文主要介紹了springboot?集成easy-captcha實(shí)現(xiàn)圖像驗(yàn)證碼顯示和登錄,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04

