集合接口(List,Set,Map)List(序列)排序--5,6

集合接口(List,Set,Map)List(序列)排序---5,6

一.List :实现类:ArrayList();


public class TestGeneric {
	/**
	 * 带有泛型——Course,的List类型属性
	 */
	public List<Course> courses;
	
	public TestGeneric() {
		this.courses = new ArrayList<Course>();//通过接口的实现类,实例化接口
	}
	/**
	 * 测试添加
	 */
	public void testAdd() {
		Course cr1 = new Course("1","大学语文");
		courses.add(cr1);
		//泛型集合中,不能添加泛型规定的类型及其子类型以外的对象,否则会报错!
//		courses.add("能否添加一些奇怪的东西呢??");
		Course cr2 = new Course("2","Java基础");
		courses.add(cr2);
	}
public void testAdd() {
		//创建一个课程对象,并通过调用add方法,添加到备选课程List中
		Course cr1 = new Course("1" , "数据结构");
		coursesToSelect.add(cr1);//将对象存入集合
		Course temp = (Course) coursesToSelect.get(0);//存入集合都变成Object类型,取出时需转换
		System.out.println("添加了课程:" + temp.id + ":" + temp.name+" List列表中的位置:"+coursesToSelect.indexOf(temp)); 
		
		Course cr2 = new Course("2", "C语言");
		coursesToSelect.add(0, cr2);//在0位置插入cr2
		Course temp2 = (Course) coursesToSelect.get(0);
		System.out.println("添加了课程:" + temp2.id + ":" + temp2.name +" List列表中的位置:"+coursesToSelect.indexOf(temp2));}
//一次添加多个
		Course[] course = {new Course("3", "离散数学"), new Course("4", "汇编语言")};
		coursesToSelect.addAll(Arrays.asList(course));//将数组转变成List,添加进coursesToSelect
		Course temp3 = (Course) coursesToSelect.get(2);
		Course temp4 = (Course) coursesToSelect.get(3);
	/**
	 * 通过for each方法访问集合元素
	 * @param args
	 */
	public void testForEach() {
		System.out.println("有如下课程待选(通过for each访问):");
		for (Object obj : coursesToSelect) {
			Course cr = (Course) obj;
			System.out.println("课程:" + cr.id + ":" + cr.name);
		}
	
/**
	 * 修改List中的元素
	 * @param args
	 */
	public void testModify() {
		coursesToSelect.set(4, new Course("7", "毛概"));
	}

二.Set接口--实现类:HashSet();

Set是元素无序并且不可以重复的集合,被称为集;
HashSet();--哈希集,是Set的重要实现类
	// 创建学生对象并选课
	public void createStudentAndSelectCours() {
		//创建一个学生对象
		student = new Student("1", "小明");
		System.out.println("欢迎学生:" + student.name + "选课!");
		//创建一个Scanner对象,用来接收从键盘输入的课程ID
//		console = new Scanner(System.in);
		
		for (int i = 0; i < 3; i++) {
			System.out.println("请输入课程ID");
			String courseId = console.next();
			for (Course cr : coursesToSelect) {
				if(cr.id.equals(courseId)) {
					student.courses.add(cr);
					/**
					 * Set中,添加某个对象,无论添加多少次,
					 * 最终只会保留一个该对象(的引用),
					 * 并且,保留的是第一次添加的那一个
					 */
//					student.courses.add(null);
//					student.courses.add(cr);
				}
			}
		}
		testForEachForSet(student);
	}
/**
 * 测试Set ForEach 方法
 * @param student
 */
	public void testForEachForSet(Student student) {
		//打印输出,学生所选的课程!
		System.out.println("共选择了:" + student.courses.size() + "门课程!");
		for (Course cr : student.courses) {
			System.out.println("选择了课程:" + cr.id + ":" + cr.name);
		}
	}
	
}
	/**
	 * 测试Set的contains方法,使用contains方法时,必须重写equals方法(比较哪个元素,添加哪个元素)
	 */
	public void testSetContains() {
		// 提示输入课程名称
		System.out.println("请输入学生已选的课程名称:");
		String name = console.next();
		// 创建一个新的课程对象,ID和名称,与course对象完全一样
		Course course2 = new Course();
		course2.name = name;
		System.out.println("新创建课程:" + course2.name);
		System.out.println("备选课程中是否包含课程:" + course2.name + ", " +
				student.courses.contains(course2));
		
	}

三.Map接口--实现类:HashMap();




/**
	 * 用来承装学生类型对象
	 */
	public Map<String, Student> students;
	/**
	 * 在构造器中初始化students属性
	 */
	public MapTest() {
		this.students = new HashMap<String, Student>();
	}
	/**
	 * 测试添加:输入学生ID,判断是否被占用
	 * 若未被占用,则输入姓名,创建新学生对象,并且
	 * 添加到students中
	 */
	public void testPut() {
		// 创建一个Scanner对象,用来获取输入的学生ID和姓名
		Scanner console = new Scanner(System.in);
		int i = 0;
		while (i < 3) {
			System.out.println("请输入学生ID:");
			String ID = console.next();
			// 判断该ID是否被占用
			Student st = students.get(ID);
			if (st == null) {
				// 提示输入学生姓名
				System.out.println("请输入学生姓名:");
				String name = console.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;
			}
		}
	}
	/**
	 * 测试Map的keySet方法
	 */
	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);
		}
	}
	/**
	 * 测试Map的keySet方法
	 */
	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);
		}
	}
	/**
	 * 通过entrySet方法来遍历Map
	 */
	public void testEntrySet() {
		// 通过entrySet方法,返回Map中的所有键值对
		Set<Entry<String, Student>> entrySet = students.entrySet();
		for (Entry<String, Student> entry : entrySet) {
			System.out.println("取得键:" + entry.getKey());
			System.out.println("对应的值为:" + entry.getValue().name);
		}
	}
/**
	 * 测试Map中,是否包含某个Key值或者某个Value值
	 */
	public void testContainsKeyOrValue() {
		// 提示输入学生id
		System.out.println("请输入要查询的学生ID:");
		Scanner console = new Scanner(System.in);
		String id = console.next();
		// 在Map中,用containsKey()方法,来判断是否包含某个Key值
		System.out.println("您输入的学生ID为:" + id + ",在学生映射表中是否存在:"
				+ students.containsKey(id));
		if (students.containsKey(id))
			System.out.println("对应的学生为:" + students.get(id).name);
		// 提示输入学生姓名
		System.out.println("请输入要查询的学生姓名:");
		String name = console.next();
		// 用containsValue()方法,来判断是否包含某个Value值
		if (students.containsValue(new Student(null,name)))
			System.out.println("在学生映射表中,确实包含学生:" + name);
		else
			System.out.println("在学生映射表中不存在该学生!");
	}

四.List(序列)排序--Collections,Comparator接口

1.通过Collections.sort()方法
2.//使用Comparator()临时排序方法
	/**
	 * 2.对String泛型的List进行排序;
	 * 创建String泛型的List,添加三个乱序的String元素,
	 * 调用sort方法,再次输出排序后的顺序
	 */
	public void testSort2() {
		List<String> stringList = new ArrayList<String>();
		stringList.add("microsoft");
		stringList.add("google");
		stringList.add("lenovo");
		System.out.println("------------排序前-------------");
		for (String string : stringList) {
			System.out.println("元素:" + string);
		}
		Collections.sort(stringList);
		System.out.println("--------------排序后---------------");
		for (String string : stringList) {
			System.out.println("元素:" + string);
		}
	}
	
	/**
	 * 3.对其他类型泛型的List进行排序,以Student为例。
	 */
	public void testSort3() {
		List<Student> studentList = new ArrayList<Student>();
		Random random = new Random();
		studentList.add(new Student(random.nextInt(1000) , "Mike"));
		studentList.add(new Student(random.nextInt(1000) , "Angela"));
		studentList.add(new Student(random.nextInt(1000) , "Lucy"));
		studentList.add(new Student(10000 , "Beyonce"));
		System.out.println("--------------排序前---------------");
		for (Student student : studentList) {
			System.out.println("学生:" + student.id + ":" + student.name);
		}
		Collections.sort(studentList);
		System.out.println("----------------排序后------------------");
		for (Student student : studentList) {
			System.out.println("学生:" + student.id + ":" + student.name);
		}
		//使用Comparator()临时排序方法
		Collections.sort(studentList, new StudentComparator());
		System.out.println("----------------按照姓名排序后-----------------");
		for (Student student : studentList) {
			System.out.println("学生:" + student.id + ":" + student.name);
		}
	}

public class Student implements Comparable<Student> {<span style="font-family: Arial, Helvetica, sans-serif;">//添加Collections接口</span>

	//@Override
	public int compareTo(Student o) {        <span style="font-family: Arial, Helvetica, sans-serif;">//Collections接口定义的 排序规范</span>

		// TODO Auto-generated method stub
		return this.id.compareTo(o.id);//以id排序
	}
}
public class StudentComparator implements Comparator<Student> {//添加Comparator接口

	@Override
	public int compare(Student o1, Student o2) {//Comparator接口定义的 排序规范
		// TODO Auto-generated method stub
		return o1.name.compareTo(o2.name);//以名字排序
	}











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值