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
	提交
		取消
	