Java集合框架下有两个重要的接口,一个是Collection接口,一个是Map接口。
一、Collection接口
Collection接口中又有三个子接口,分别是List(序列),Queue(队列),Set(集), 其中常用的有List和Set;
List和Queue集合中元素是有序的并且是可以重复的,而Set集合中元素是无序且不可重复的;
List接口中有两个常见的实现类,分别是ArrayList实现类和LinkedList实现类,而LinkedList同时也是Queue的实现类,Set接口的实现类是HashSet。
ArrayList实现类中提供了许多方法用来对List集合元素实现增删改查的目的。(HashSet实现类的方法与ArrayList类似,这里以ArrayList为例简要介绍)
以学生选课为例:(简写代码)
首先定义一个Course类:
public class Course;
再定义一个List集合,用以盛装Course类型的对象
public List<Course> CoursesToSelect;
“<>”里面的内容是泛型,表明集合中存储的元素是该类型,本例中的泛型就是Course类型的;
增:ArrayList中的add,addAll方法都可以往集合中添加元素
Course cr1 = new Course("1", "大学英语");
CoursesToSelect.add(cr1);
Course cr2 = new Course("2", "大学物理");
CoursesToSelect.add(0, cr2);(“0”是所要添加元素的索引位置)
Course[] course = { new Course("3", "高等数学"), new Course("3", "离散数学") };
CoursesToSelect.addAll(Arrays.asList(course));
删:ArrayList中的Remove,RemoveAll方法都可以实现删除集合中的元素
public void testRemove() {
Course cr = CoursesToSelect.get(1);
CoursesToSelect.remove(cr);
}
public void testRemoveAll() {
Course[] cr = { (Course) CoursesToSelect.get(1), (Course) CoursesToSelect.get(2) };
CoursesToSelect.removeAll(Arrays.asList(cr));
}
改:ArrayList中的set方法可以修改集合中的元素
public void testModify() {
CoursesToSelect.set(2, new Course("4", "毛概"));
}
查:ArrayList中可以有多种方法可以查询集合中的所有元素
<方法1>public void testshow() {
int size = CoursesToSelect.size();
System.out.println("有如下课程备选:");
for (int i = 0; i < size; i++) {
Course temp1 = CoursesToSelect.get(i);
System.out.println(temp1.getId() + ":" + temp1.getName());
}
}
/**
* 通过迭代器访问CoursesToSelect Iterator实际上是一个接口
*/
<方法2>public void testIterator() {
Iterator<Course> it = CoursesToSelect.iterator();
System.out.println("通过迭代器访问:");
while (it.hasNext()) {
Course cr = it.next();
System.out.println(cr.getId() + ":" + cr.getName());
}
}
/**
* 通过ForEach遍历集合元素
*/
<方法3>public void testforeach() {
System.out.println("通过foreach访问");
for (Course obj : CoursesToSelect) {
System.out.println(obj.getId() + ":" + obj.getName());
}
}
<方法4>public void testListContains() {
Course course=CoursesToSelect.get(0);
System.out.println("已经取得课程:"+course.getName());
System.out.println("备选课程中是否包含课程"+course.getName()+","+CoursesToSelect.contains(course));
二、Map接口
Map接口的实现类是HashMap,它里面的元素(无序排列)是Entry类型的对象实例,也就是键值对<key,value>,类似与数学函数里的映射关系。元素的key值是不可以重复的,一个key值对应一个value值,但是一个value值可以对应多个Key值。
首先定义一个学生类:
public class Student;
再定义一个Map集合,用以盛装Student类型的对象:
public Map<String,Student> students;
增:HashSet中的put方法可以实现往集合中添加元素
students.put(stuId, student);
删:HashSet中的Remove方法可以实现删除集合中的元素
students.remove(ID);
改:HashSet中的put方法可以修改集合中的元素
public void testModify(){
while(true){
System.out.println("请输入要修改的学生ID:");
String ID=scan.next();
Student st=students.get(ID);
if(st!=null){
System.out.println("请输入要修改的学生姓名:");
String name=scan.next();
Student newStudent=new Student(ID,name);
students.put(ID, newStudent);
break;
}
else{
System.out.println("该学生ID不存在,请重新输入!");
continue;
}
}
}
查:HashSet中可以有多种方法可以查询集合中的所有元素
<方法1>public void testkeySet(){
Set<String>keySet=students.keySet();
System.out.println("已添加"+students.size()+"学生:");
for(String stuid:keySet){
Student st=students.get(stuid);
if(st!=null){
System.out.println("学生:"+st.getName());
}
}
}
<方法2>public void testEntrySet(){
Set<Entry<String, Student>> entrySet=students.entrySet();
for(Entry<String, Student> entry:entrySet){
System.out.println("取得键:"+entry.getKey());
System.out.println("对应的值:"+entry.getValue().getName());
}
}
对某个序列进行排序,那么这个序列中的元素必须实现Comparable接口,Comparable接口采用的是默认的比较规则,其实现类必须实现compareTo()方法,而Comparator接口采用的是临时的比较规则,其实现类必须实现compare()方法。