第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

輸入順序打亂,keySet出來的是有序的

輸入1,3,2出來的怎么是1,2,3

https://img1.sycdn.imooc.com//5b13e6010001c06b03720753.jpg

package?com.com.test.collection;

import?java.sql.Struct;
import?java.util.HashMap;
import?java.util.Map;
import?java.util.Scanner;
import?java.util.Set;

public?class?MapTest?{
????/**
?????*?用來承裝學(xué)生類型對象
?????*/
????public?Map<String,Student>?students;

????/**
?????*?在構(gòu)造方法中初始化students
?????*/
????public?MapTest(){
????????this.students?=?new?HashMap<String,Student>();
????}
????/**
?????*?測試添加:輸入學(xué)生ID,判斷是否被占用
?????*?未占用,則輸入學(xué)生姓名,創(chuàng)建新學(xué)生對象,并且
?????*?添加到students中
?????*/
????public?void?testAdd(){
????????Scanner?sca?=?new?Scanner(System.in);
????????int?i=?0;
????????while(i<3){
????????????System.out.println("請輸入學(xué)生ID");
????????????String?ID?=?sca.next();
????????????//判斷ID是否被占用
????????????Student?st?=?students.get(ID);
????????????if(st?==?null){
????????????????//提示輸入姓名
????????????????System.out.println("請輸入姓名");
????????????????String?name?=?sca.next();
????????????????//創(chuàng)建新的學(xué)生對象
????????????????Student?newStudent?=?new?Student(ID,name);
????????????????//通過調(diào)用students的put方法,添加ID-學(xué)生映射
????????????????students.put(ID,newStudent);
????????????????System.out.println("添加成功:"+students.get(ID).id+students.get(ID).name);
????????????????i++;
????????????}else{
????????????????System.out.println("該學(xué)生ID已被占用!");
????????????????continue;
????????????}
????????}
????}
????/**
?????*?測試Map的keySet方法遍歷返回學(xué)生列表
?????*/
????public?void?testKeySet(){
????????//通過keySet方法,返回Map中的所有鍵的集合
????????Set<String>?keySet?=?students.keySet();
????????//取得students的容量
????????System.out.println("總共有"+students.size()+"個(gè)學(xué)生");
????????//遍歷keySet,取得每一個(gè)鍵,在調(diào)用get方法取得每個(gè)鍵的value
????????for?(String?stuId:keySet){
????????????Student?st?=?students.get(stuId);
????????????if(st?!=?null){
????????????????System.out.println("學(xué)生:"+st.id+st.name);
????????????}
????????}
????}

????/**
?????*?測試刪除,remove
?????*?@param?args
?????*/
????public?void?testRemove(){
????????System.out.println("請輸入要刪除的學(xué)生ID!");
????????//輸入待刪除的學(xué)生ID
????????Scanner?console?=?new?Scanner(System.in);
????????while(true){
????????????String?ID?=?console.next();
????????????Student?st?=?students.get(ID);
????????????if(st?==null){
????????????????//提示ID不存在
????????????????System.out.println("該ID不存在!");
????????????????continue;
????????????}
????????????students.remove(ID);
????????????System.out.println("成功刪除學(xué)生:"+st.name);
????????????break;
????????}
????}
????/**
?????*?測試修改
?????*/
????public?void?testModify(){
????????System.out.println("請輸入要修改的學(xué)生的ID!");
????????Scanner?console?=?new?Scanner(System.in);
????????while(true){
????????????String?stuID?=?console.next();
????????????Student?st?=?students.get(stuID);
????????????if(st?==?null){
????????????????System.out.println("該ID不存在!");
????????????????continue;
????????????}
????????????System.out.println("當(dāng)前該學(xué)生ID,所對應(yīng)的學(xué)生為:"+st.name);
????????????System.out.println("請輸入新的學(xué)生姓名:");
????????????String?name?=?console.next();
????????????Student?newStudent?=?new?Student(stuID,name);
????????????students.put(stuID,newStudent);
????????????System.out.println("修改成功!");
????????????break;
????????}
????}

????/**
?????*?通過entrySet方法來遍歷Map
?????*?@param?args
?????*/
????public?void?testEntrySet(){
????????Set<Map.Entry<String,Student>>?entrySet?=?students.entrySet();
????????for?(Map.Entry<String,Student>?entry:entrySet){
????????????System.out.println("取得鍵:"+entry.getKey());
????????????System.out.println("對應(yīng)的值為:"+entry.getValue().name);
????????}
????}

????public?static?void?main(String[]?args)?{
????????MapTest?mt?=?new?MapTest();
????????mt.testAdd();
????????mt.testKeySet();
//????????mt.testRemove();
????????mt.testEntrySet();
????????mt.testModify();
????????mt.testEntrySet();
????}
}


正在回答

5 回答

首先你要知道Java中無序(unordered),有序(ordered)是什么意思,它們跟我們我們所理解的可能不太一樣.

? 在Java中無序指的是Java語言沒有規(guī)定某個(gè)容器按什么順序遍歷,在不同的Java虛擬機(jī)上對某個(gè)容器的實(shí)現(xiàn)是不一樣,比如說運(yùn)行在Windows和Linux上的Java虛擬機(jī)對HashSet的遍歷順序可能不太一樣,但對同一種虛擬機(jī)來說遍歷輸出都是一樣的。而不是我們?nèi)粘K斫獾?無序就是亂序"的意思。

? 有序也是一樣的道理,Java規(guī)定了容器的遍歷順序,在不同的Java虛擬機(jī)上要保證遍歷的順序跟加入元素的順序一致。

? 通俗地來講,在Java中無序就是不同的Java虛擬機(jī)對某個(gè)容器有不同的遍歷方法,但對每一個(gè)具體的虛擬機(jī)它們的遍歷方法是固定的.比如你遇到的情況在Windows上運(yùn)行的Java虛擬機(jī)對HashSet的遍歷只有一種輸出方式,但你換一個(gè)Java虛擬機(jī)跑一跑你這個(gè)程序可能輸出就不一樣了。


2 回復(fù) 有任何疑惑可以回復(fù)我~

我的也是有序輸出,搞不懂為什么。。。

0 回復(fù) 有任何疑惑可以回復(fù)我~

設(shè)置輸入五六個(gè),測試多幾次就好了。

0 回復(fù) 有任何疑惑可以回復(fù)我~

同我也是這樣的,不管怎么輸入結(jié)果都是有序的,不知道為什么我Set集輸出的結(jié)果也是一直都是有序的

0 回復(fù) 有任何疑惑可以回復(fù)我~

鏈表和哈希表的區(qū)別。
如果你學(xué)過數(shù)據(jù)結(jié)構(gòu),你就知道鏈表的特性,list是一種鏈表
set是哈希表,通過哈希值來存取,所以理論上的存取時(shí)間復(fù)雜度是O(1)

你每次運(yùn)行結(jié)果是不一樣的

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消

輸入順序打亂,keySet出來的是有序的

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號