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。
代码就不写了,相信好好看了前面的童鞋都应该能想到。
多多指教