Java中的集合框架(一)

Collection Map 是Java集合框架的两个根接口;

List  、Queue 、Set 是Collection的三个常用的子接口;

Map 也有很多的子接口,不过最常用的是其中一个实现类 HashMap;


一.collection接口

   是  List  、Queue 、Set 的父接口,定义了可用于操作List  、Queue 、Set 的方法——增删查改

1. List接口及其实现类——ArrayList

    List是元素有序并且可以重复的集合,被称为序列;

    List可以精确的控制每个元素的插入位置,或删除某个位置的元素;

    ArrayList——数组序列,是List的一个实现类,底层是由数组实现的;


下面举一个例子:

实现功能:模拟学生选课功能

选择课程(往集合中添加课程);

删除所选的课程(删除集合中的元素);

查看所选课程;

修改所选课程;

/*
 * 创建一个课程类
 */
public class Course {
	public String id;
	
	public String name;
	
	public Course(){}
	
	public Course(String id,String name){
		
		this.id=id;
		this.name=name;
	}
}
import java.util.HashSet;
import java.util.Set;
/*
 * 创建一个学生类
 */
public class Student {
	
	public String id;
	
	public String name;
	
	/*
	 * 存放学生所选课程
	 */
	public Set<Course> course;//泛型

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

这里介绍一下泛型:

集合中的元素,可以是任意类型的对象(对象的引用)

    如果把某个对象放入集合,则会忽略他的类型,而把他当作Object处理;

泛型则是规定了某个集合只可以存放特定类型的对象

    会在编译期间进行检查

    可以直接按指定类型获取集合元素

import java.util.ArrayList;
import java.util.List;
/*
 * 备选课程类
 */
public class ListTest {
	
	public List coursesToSelect;//用于存放备选课程的List
	
	public ListTest(){
		this.coursesToSelect =new ArrayList();
	}

	/*
	 * 用于往coursesToSelect中添加备选课程
	 */
	public void testAdd(){
		//创建一个课程对象,并通过调用add方法添加到备选课程
		Course cr1 =new Course("1","数据结构");
		coursesToSelect.add(cr1); 
		
		//对象存入集合都变成Object类型,取出时需要进行强制类型转换
		Course temp=(Course)coursesToSelect.get(0);
		System.out.println("添加课程:"+temp.id+":"+temp.name);
		
		//可指定添加位置
		Course cr2 =new Course("2","C语言");
		coursesToSelect.add(0,cr2);
		Course temp2=(Course)coursesToSelect.get(0);
		System.out.println("添加课程:"+temp2.id+":"+temp2.name);
	
		Course []courses={new Course("3","计算机组成"),new Course("4","编译原理")}; 
		coursesToSelect.addAll(Arrays.asList(courses));
		Course temp3=(Course)coursesToSelect.get(2);
		Course temp4=(Course)coursesToSelect.get(3);
		System.out.println("添加了两门课程:"+temp3.id+":"+temp3.name+"    "+temp4.id+":"+temp4.name);
		//指定插入位置
		Course []courses2={new Course("5","高等数学"),new Course("6","大学英语")}; 
		coursesToSelect.addAll(0,Arrays.asList(courses2));
		Course temp5=(Course)coursesToSelect.get(0);
		Course temp6=(Course)coursesToSelect.get(1);
		System.out.println("又添加了两门课程:"+temp5.id+":"+temp5.name+"    "+temp6.id+":"+temp6.name);	
	
	}

	public static void main(String[] args) {
		ListTest lt =new ListTest();
		lt.testAdd();

	}
}

接下来是几个遍历List的方法

	/**
	 * 取得List中的元素的方法
	 */
	public void testGet(){
		int size = coursesToSelect.size();
		System.out.println("有如下课程可选:");
		for (int i=0;i<size;i++){
			Course cr=(Course)coursesToSelect.get(i);
			System.out.println("课程:"+cr.id+":"+cr.name);
		}
	}
	
	/**
	 * 通过迭代器来遍历List
	 * 需要import java.util.Iterator;
	 */
	public void testIterator(){
		Iterator it =coursesToSelect.iterator();
		System.out.println("有如下课程待选(通过迭代器访问):");
		while(it.hasNext()){
			Course cr=(Course)it.next();
			System.out.println("课程:"+cr.id+":"+cr.name);
		}
	}
	
	/**
	 * 用foreach遍历
	 */
	public void testForeach(){
		System.out.println("有如下课程待选(通过foreach访问):");
		for (Object obj:coursesToSelect){
			Course cr=(Course)obj;
			System.out.println("课程:"+cr.id+":"+cr.name);
		}
	}

以及对List的元素进行删除和修改的方法

/**
	 * 修改List的元素
	 */
	public void teseModify(){
		coursesToSelect.set(1,new Course("1","毛概"));
		testForeach();
	}
	
	/**
	 * 删除List的元素
	 */
	public void testRemove(){
		Course cr=(Course)coursesToSelect.get(1);
		coursesToSelect.remove(cr);
		System.out.println("成功删除课程");
		testForeach();
//		removeAll方法
		Course[] crs={(Course)coursesToSelect.get(2),(Course)coursesToSelect.get(3)};
		coursesToSelect.removeAll(Arrays.asList(crs));
		System.out.println("成功删除两个课程");
		testForeach();
	}


 

猜你喜欢

转载自blog.csdn.net/qq_36986067/article/details/80637907