集合框架的应用解析

 

java集合框架:

  1.集合概念:集合可以看做是我们在内存中存放一组对象的容器,就像数组,或队列一样,

 

  2.java.util.Set接口  他的子类类提供的是一个无序的集合;

    java.util.List接口 他的子类提供的是一个有序的集合;

    java.util.Map接口 他提供了一个映射关系的集合数据结构;

 

  3.List接口

    如:创建一个装学生对象的List

public List<Student> createList(){

		//构造学生队列 ,并将队列长度固定为 20 
		List<Student> list = new ArrayList<Student>(20);
		//用循环将创建对象并将其添加到队列中
		for(int i=0;i<20;i++){
			//设置参数
			String name = "学生"+((char)(65+i));
			Random rand = new Random();
			int score = rand.nextInt(20);
			//设置学生信息
			Student stu = new Student(name,score);
			list.add(stu);
		}
		return list;
	}  
 

这样就创建了一个装存学生对象的List集合,并用随机数给他赋了值。

public void deleteScore(List<Student> list,int score){

		System.out.println("删除的学生为:");
		//用循环开始寻找
		for(int i=0;i<list.size();){
			//获取每个学生的对象
			Student stu = list.get(i);
			//匹配
			if(stu.getScore() < score){
				System.out.println(stu.getName()+":  "+stu.getScore());
				list.remove(stu);
			}
			else{
				i++;
			}
		}
	}
 

这样就删除了小于Score分数的学生,需要注意的是,每当你删除一个学生,List的长度就会减少一个单位,

 

所以在用循环的时候,要注意控制循环变量的变化!!

 

  4.Set集合

Set集合的创建和List的差不多,因为他们的add函数都一样

如:

public Set<Student> createList(){

		//构造学生队列 ,并将队列长度固定为 20 
		Set<Student> set = new  HashSet<Student>(20);
		//用循环将创建对象并将其添加到队列中
		for(int i=0;i<20;i++){
			//设置参数
			String name = "学生"+((char)(65+i));
			Random rand = new Random();
			int score = rand.nextInt(20);
			//设置学生信息
			Student stu = new Student(name,score);
			set.add(stu);
		}
		return set;
	}
 

这个就可以不用说了,值得一提的是,在Set中,需要寻找到某一个数据时,不能用get函数,因为Set根本没

 

有Get函数,我们需要用到迭代器!!

如:

public void searchScore(Set<Student> set,int score){

		System.out.println("成绩为"+score+"的学生有:");
		//获取迭代器
		Iterator<Student> ite = set.iterator();
		//循环找,并打印
		while(ite.hasNext()){
			//获取相应位置上的学生对象
			Student stu = ite.next();
			if(score == stu.getScore())
			System.out.println(stu.getName()+":  "+stu.getScore());
		}
	}
 

这里有两个非常重要的函数 hasNext(),判断set是否有后继,next()即为返回他的后继。还有在删除的时候

 

必须要用数组存储起来一次性删除,

Set<Student> s = new HashSet<Student>();

		Student stu = ite.next();
			if(score >stu.getScore()){
				s.add(stu);
				System.out.println(stu.getName()+":  "+stu.getScore());
			}
 

然后就remove(s);就ok啦

 

Map,Map是一个特殊的集合,他没有父类,他由映射关系形成,key值不可重复,而影射值是可以重复的,他

 

的一些使用方法与其他两种大致相同,不同的是,寻找他的数据需要吗,利用key值建造set的集合接口,然

 

后用set的迭代器根据key值映射寻找自己的值:

如:

public void searchScore(Map<Integer,Student> map,int score){

		System.out.println("成绩为"+score+"的学生有:");
		//创建set集合框架
		Set<Integer> set = map.keySet();
		//获取迭代器 (Set中只有这样才能获取下一个对象,因为他是无序不重复的)
		Iterator<Integer> ite = set.iterator();
		//创建队列将要删除的东西保存到队列
		Set<Student> s = new HashSet<Student>();
		while(ite.hasNext()){
			//获取相应位置上的学生对象
			int number = ite.next();
			Student stu = map.get(number);
			if(score >stu.getScore()){
				s.add(stu);
				System.out.println(stu.getName()+":  "+stu.getScore());
			}
		}	
	}
 

里边多了个函数keySet(),是把map的key转化为set集合类型。map的删除和set里得差不多,还是把key用set装起来,利用set的迭代器来寻找key值,然后利用key值找到数据,把数据存起来,删除就ok。

代码就不写了,相信好好看了前面的童鞋都应该能想到。

 

 

多多指教


你可能感兴趣的:(集合框架,解析,应用)