为了账号安全,请及时绑定邮箱和手机立即绑定

为什么遍历SET出来的是有序的,试了很多次都是这样

package com.study.collection;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class SetTest {
	
	public List<Course> coursesToSelect;
	
	public SetTest(){
		this.coursesToSelect = new ArrayList<Course>();
	}
	
	public void testAdd(){
		//向List添加单个课程元素
		Course cr1 = new Course("1","数据结构");
		coursesToSelect.add(cr1);
		
		//向List中指定索引位置添加单个课程元素
		Course cr2 = new Course("2", "C语言");
		coursesToSelect.add(0, cr2);
				
		//用List的addAll方法添加多个课程元素
		Course[] course = {new Course("3", "离散数学"),new Course("4", "汇编语言")};		
		//使用工具类Arrays的asList将数组转化为List元素
		coursesToSelect.addAll(Arrays.asList(course));

		
		//用List的addAll方法向List中的指定位置添加多个课程元素
		Course[] course2 = {new Course("5", "高等数学"), new Course("6", "大学英语")};
		coursesToSelect.addAll(2, Arrays.asList(course2));

	}
	
	/**
	 * 通过for each语名来遍历List中的元素,它是迭代器的简化写法
	 * @param argus
	 */
	public void testForEach(){
		System.out.println("有如下课程可供选择(通过for each访问):");
		for(Course cr : coursesToSelect){
			System.out.println("课程:" + cr.id + ":" + cr.name);
		}
	}
	
	

	public static void main(String[] args) {
		SetTest st = new SetTest();
		st.testAdd();
		st.testForEach();
		
		//创建一个学生对象
		Student student = new Student("1", "小明");
		System.out.println("欢迎学生" + student.name + "选课");
		
		//创建一个Scanner对象
		Scanner console = new Scanner(System.in);	
		
		for (int i = 0 ; i < 3 ; i ++){
			System.out.println("请输入课程ID:");
			String courseId = console.next();
			for (Course cr : st.coursesToSelect){
				if (cr.id.equals(courseId)){
					student.courses.add(cr);
				}
			}
			
		}
		st.testForEachForSet(student);
		

	}
	
	public void testForEachForSet(Student student){
		for (Course csr : student.courses){
			System.out.println("选择了如下课程:" + csr.id + ":" + csr.name);
		}
	}

}

遍历SET出来的是有序的,试了很多次都是这样。没有出现视频中的乱序 

刚开始没贴出Student类,不好意思。Student.courses 是Set

package com.study.collection;

import java.util.HashSet;
import java.util.Set;
/**
 * 学生类
 **/
public class Student {

	public String id;
	public String name;
	public Set<Course> courses;
	
	public Student(String id, String name){
		this.id = id;
		this.name = name;
		this.courses = new HashSet<Course>();
	}
}

正在回答

5 回答

兄弟你用的是List啊  你连set包都没引  你跟我说你用了set?

0 回复 有任何疑惑可以回复我~
#1

zhouwh 提问者

第67行 student.courses.add(cr); 中的courses 是student类的属性用的是Set。在Student类中引入了Set包
2016-04-10 回复 有任何疑惑可以回复我~
#2

zhouwh 提问者

非常感谢!
2016-04-12 回复 有任何疑惑可以回复我~
package test;

import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;

public class Test24 {

	public static void main(String[] args) {
		Set<String> s = new HashSet<>();
		s.add("5");
		s.add("7");
		s.add("6");
		s.add("4");
		s.add("8");
		for (String integer : s) {
			System.out.println(integer);
		}
	}

}


0 回复 有任何疑惑可以回复我~
#1

浊酒丶

LinkedHashSet是按输入顺序,TreeSet和HashSet 结果一样,都是从小到大
2017-06-12 回复 有任何疑惑可以回复我~

我也是,加了5门过后还是不行。。

0 回复 有任何疑惑可以回复我~

我也这问题。。。

0 回复 有任何疑惑可以回复我~
#1

zhouwh 提问者

SET中添加的课程太少,添加5个课程,就不会每次一样了
2016-05-11 回复 有任何疑惑可以回复我~
#2

qq_绊_0 回复 zhouwh 提问者

你说的很对啊
2018-01-14 回复 有任何疑惑可以回复我~
#3

qq_星杠加减点_0

怎么解决的?
2018-02-05 回复 有任何疑惑可以回复我~

你是用的是集合List,不是set集合,List是有序的

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么遍历SET出来的是有序的,试了很多次都是这样

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信