package com.imooc.test;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class TestMap {
public Map<Integer, String> map;
public TestMap() {
// TODO Auto-generated constructor stub
map = new HashMap<Integer, String>();
}
public void testPut(){
map.put(3, "爸爸");
map.put(1, "孙子");
map.put(4, "爷爷");
map.put(2, "儿子");
}
public void testKeySet(){
Set<Integer> keySet = map.keySet();
for(Integer key : keySet){
String st = map.get(key);
if (st != null)
System.out.println(st);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TestMap tm = new TestMap();
tm.testPut();
tm.testKeySet();
}
}陈码农 【Java入门第三季】- 【第5章】 - 【5-2学生选课---使用Map添加学生】package com.imooc.collection_map;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
public class MapTest {
/**
* 用来承装学生类型的对象
*/
public Map<String, Student> students;
/**
* 在构造器中初始化students属性
*/
public MapTest() {
this.students = new HashMap<String, Student>();
}
/**
* 测试添加: 输入学生ID, 判断是否被占用 若未被占用, 则输入姓名, 创建新学生对象 并且添加到students中
*/
public void testPut() {
// 创建一个Scanner对象, 用来获取输入的学生ID和姓名
Scanner scan = new Scanner(System.in);
int i = 0;
while (i < 3) {
System.out.println("请输入学生ID: ");
String ID = scan.next();
// 判断该ID是否被占用
Student st = students.get(ID);
if (st == null) {
// 提示输入学生姓名
System.out.println("请输入学生姓名: ");
String name = scan.next();
// 创建新的学生对象
Student newStudent = new Student(ID, name);
// 通过调用students的put方法, 添加 ID-学生 映射
students.put(ID, newStudent);
System.out.println("成功添加学生:" + students.get(ID).name);
i++;
} else {
System.out.println("该学生ID已被占用!");
continue;
}
}
}
/**
* 通过keySet方法遍历Map
*/
public void testKeySet() {
// 通过keySet方法, 返回Map中所有"键"的Set集合
Set<String> keySet = students.keySet();
// 取得students的容量
System.out.println("总共有:" + students.size() + "个学生!");
// 遍历keySet, 取得每一个键, 再调用get方法取得每个键对应的value
for (String stuId : keySet) {
Student st = students.get(stuId);
if (st != null)
System.out.println("学生: " + st.name);
}
}
/**
*
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MapTest mt = new MapTest();
// 调用testPut()
mt.testPut();
mt.testKeySet();
}package com.imooc.collection_map;
import java.util.HashSet;
import java.util.Set;
/**
* 学生类
*
* @author KEN
*
*/
public class Student implements Comparable<Student>{
public String id;
public String name;
public Set<Course> courses; // List, Queue, Set 是 Collection的子接口
//Student构造方法
public Student(String id, String name) {
this.id = id;
this.name = name;
this.courses = new HashSet<Course>();
}
}
3 回答
已采纳
Its_forever
TA贡献361条经验 获得超328个赞
刚刚格式乱了:
你是想说:老师的输入顺序是1,2,3为什么打印出来的却是3,2,1吧? 还是我之前说的,Set集合的无序性体现在输入顺序和输出顺序不一样。 比如:我这样输入 学号为:1 再输入姓名:Tom //一 学号为:3 再输入姓名:xiaoming //二 学号为:2 再输入姓名:Jack //三 输出顺序还是(3,2,1)。 不论你怎么改变一,二,三的顺序,输出顺序始终是(3,2,1)。 这就是我说的,Set的无序性体现在输入顺序和输出顺序不一致。
Its_forever
TA贡献361条经验 获得超328个赞
关于set无序集合,它的无序性体现在不按照添加的时候的顺序存储 。
比如你的添加顺序是这样的:
map.put(3, "爸爸"); map.put(1, "孙子"); map.put(4, "爷爷"); map.put(2, "儿子");
如果他是有序的话那么他的输出顺序是不是就该是:
爸爸,孙子,爷爷,儿子
但是它却输出了:
孙子,儿子,爸爸,爷爷
这就是Set集合无序性的体现,而不是输出顺序的无序性。
其实Set也是有序的,只是他的内部是按着hashCode来排序的。看起来无序而已。
你数字感觉的不明显,用字符串排序就明显一些了;
public static void main(String[] args) { Collection people = new HashSet(); people.add("孙子"); //1 people.add("爷爷"); //2 people.add("儿子"); //3 people.add("爸爸" ); //4 Iterator it = people.iterator(); while(it.hasNext()){ String test = (String)it.next(); System.out.println(test); } } // 输出为:爸爸 儿子 爷爷 孙子
你不论怎么改变1,2,3,4的顺序,他的输出都是不会变的。
以上是我个人理解的Set集合的无序性。
添加回答
举报
0/150
提交
取消