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;
=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;
=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("添加课程:"++":"+);
//可指定添加位置
Course cr2 =new Course("2","C语言");
coursesToSelect.add(0,cr2);
Course temp2=(Course)coursesToSelect.get(0);
System.out.println("添加课程:"++":"+);
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+":"++" "+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("课程:"++":"+);
}
}
/**
* 通过迭代器来遍历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("课程:"++":"+);
}
}
/**
* 用foreach遍历
*/
public void testForeach(){
System.out.println("有如下课程待选(通过foreach访问):");
for (Object obj:coursesToSelect){
Course cr=(Course)obj;
System.out.println("课程:"++":"+);
}
}
以及对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();
}