Java集合机制

Java 集合框架

一.关于集合

      若读者接触过c语言,就不难理解java中的集合就像是c语言中的结构体,一般数组只能存储同一种类型的数据,而集合和结构体则能存储包含多种不同类型数据的对象。例如,学生信息,在集合中以对象名即地址存储,但通过调用即能得到具体不同的数据类型,如姓名,学号,分数等。

      总的来说,集合就如同一个口袋,可以放置任何东西,可以无序,可以有序,非常之方便。

二.集合框架总体结构

    在Java.util包下面定义的常用的三种集合分别是:

1)Set集合,其对象不按特定顺序排列,不能有重复对象,常用子类:HashSet,TreeSet

2)  List集合,其对象按特定顺序排列,允许有重复对象,常用子类:Vector,ArrayList

3)Map集合,其对象由key值和value值按照映射规则组成,常用子类:HashMap,Hashtable

注:java中的集合都是以接口定义的,其中Set集合和List集合同属于Collecton的子类,而Map集合则是单独自成一类,没有父类。

以下就从三种集合的基本操作切入,讲解示范以下如何用他们实现对学生信息的增删查改等功能:

A  Set

public Set<Student> creatSet(int size) {
		// 实例化一个set对象,其子类HashSet
		Set set = new HashSet<Student>();
		// 创建循环数产生成绩
		Random rand = new Random();
		// 添加Student对象进去,传入姓名和成绩
		for (int i = 0; i < size; i++) {
			String name = "学生" + (char) (65 + i);
			set.add(new Student(name, rand.nextInt(100)));
		}
		return set;

	}
 
public void findInformation(Set<Student> set, int grade) {
		// set是无序的,不能根据所以查找,必须得到迭代器,是接口,不能实例化创建对象
		Iterator<Student> it = set.iterator();
		// 调用迭代器中的hasNext方法,判断是否存在下一个,作为判断的条件
		while (it.hasNext()) {
			// 获取下一个元素
			Student stu = it.next();
			// 判断
			if (stu.getGrade() >= grade) {
				// 如果符合查找的条件,就输出学生信息
				System.out.println(stu.toString());

			}

		}

	}
public void deleteInformation(Set<Student> set, int grade) {
		// 获取迭代器,泛型指定为Student类型
		Iterator<Student> it = set.iterator();
		// 创建一个set集合,用来放置待被删除元素
		// Set<Student> newSet = new HashSet();
		while (it.hasNext()) {
			// 获取下一个元素
			Student stu = it.next();
			if (stu.grade < grade) {
				// 注,这里不能一个一个删除,由于是不连续的,删除后将得不到下一个元素的位置,只能将符合删除的元素放置另一个集合中,此时选用set集合
				newSet.add(stu);// 将元素添加到newSet集合中
			}

		}
		// 全部遍历完,一起删掉符合条件的元素,用Set集合中的removeAll方法
		set.removeAll(newSet);

	}
 

B List

List集合中由于对象是按顺序存储的,按条件查找元素的时候就无需用到迭代器,根据List集合的大小直接循环遍历即可,需要注意的是,删除对象的时候,循环条件中i++,应该放在else if语句中,否则将出现部分符合条件的对象无法删除,其原因读者可以想想哈~~

C Map<key,value>

1)增加对象时,Map集合中没有add()方法,只能用put(key,value)方法,将key值和value值和其一对一的关系添加至Map集合中。

2)删除对象时,Map集合中既不能直接将对象一个一个删除,也不能像Set集合将对象放置在另一个Map集合中,利用removeAll一起删除,只能用keySet()方法先返回所有key值存储在一个Set集合中,再创建迭代器,得到每个key值,用get(key)方法得到对应的value值,将符合条件对象的key值存储在另一个Set集合中,完成遍历后,再得到迭代器,循环用remove(key)方法删除对应对象。

public void deleteInformation(Map<String, Student> map, int grade) {
		// 获取map集合key值的set集合
		Set<String> set = map.keySet();
		// 获取迭代器,泛型指定为Student类型
		Iterator<String> it = set.iterator();

		while (it.hasNext()) {
			// 获取下一个元素
			String key = it.next();
			// 由key值得到stu
			Student stu = map.get(key );
			// 比较
			if (stu.grade < grade) {
				// 注,这里不能一个一个删除,由于是不连续的,删除后将得不到下一个元素的位置,只能将符合删除的元素放置另一个集合中,此时选用set集合
				newSet.add(key );// 将学号即key值添加到newSet集合中
				System.out.println(stu.toString());
			}

		}

		// 得到newSet集合的迭代器
		it = newSet.iterator();
		while (it.hasNext()) {
			// 获取key 值
			String key= it.next();
			map.remove(key);//在map集合中删掉对应key值
		}

	}
 

三.结束语

     以上只是介绍了最基本子类和方法的使用,希望读者和我可以多学习,多加交流。

猜你喜欢

转载自csu-ningman.iteye.com/blog/1594640