一、集合的概念
现实生活中:很多的事物凑在一起;
数学中:具有共同属性的事物的总体;
Java中的集合类:是一种工具类,就像容器,储存任意数量的具有共同属性的对象。
二、集合的作用
1、在类的内部,对数据进行组织;
2、简单而快速的搜索大量数目的条目;
3、有的集合接口,提供了一系列排列有序的元素,并且可以在序列中间快速的插入或删除有关元素;
4、有的集合接口,提供了映射关系,可以通过关键字key去快速查找对应的唯一对象,而这个关键字可以是任意类型;
三、集合与数组对比的优势
1、数组的长度固定,集合长度可变
2、数组只能通过下标访问元素,类型固定,而有的集合可以通过任意类型查找所映射的对象。
四、Java集合体系框架
(一)、Collection 接口,是List、Queue、Set接口的父接口,定义了可用于操作List、Set和Queue的方法(增删改查)。
1、List接口及实现类-ArrayList
List是元素有序并且可以重复的集合,被称为序列;
List可以精确控制每个元素的插入的位置或删除某个位置的元素;
ArrayList:数组序列,是List集合中使用最高的实现类;底层是由数组实现的。
比较重要的方法:
add(),addAll();向集合添加元素
get();在集合中取出元素
remove();removeAll();删除指定元素
set();修改集合中的元素
注意:集合中的元素,可以是任意类型的对象(对象的引用),如果把某个对象放入集合,则会忽略它的类型,而把他当做Object处理。
例如:学生 选课系统
Course类:
package com.collection;
/**
* 课程类
* @author Timor
*
*/
public class Course {
public String id;
public String name;
public Course(String id,String name){
this.id = id;
this.name = name;
}
}
package com.collection;
import java.util.HashSet;
import java.util.Set;
/**
* 学生类
* @author Timor
*
*/
public class Student {
public String id;
public String name;
public Set courses;
public Student(String id,String name){
this.id = id;
this.name = name;
this.courses = new HashSet();
}
}
package com.collection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
/**
* 备选课程类
*
* @author Timor
*
*/
public class ListTest {
public List coursesToSelect;
public ListTest() {
this.coursesToSelect = new ArrayList();
}
/*
* 用于往courseToSelect中添加备选课程
*/
public void testAdd() {
// 创建一个课程对象,并通过add方法添加到备选课程list中
Course c1 = new Course("1", "数据结构");
coursesToSelect.add(c1);
// 对象存入集合都会变成Object类型,取出时需要类型转换
Course temp = (Course) coursesToSelect.get(0);
System.out.println("添加课程:" + temp.id + ":" + temp.name);
Course c2 = new Course("2", "Java");
// 添加到指定的位置,如果超出集合长度,会报出数组下标越界异常
coursesToSelect.add(0, c2);
Course temp2 = (Course) coursesToSelect.get(0);
System.out.println("添加课程:" + temp2.id + ":" + temp2.name);
// 将指定 collection 中的所有元素都添加到此 collection 中
Course[] course = { new Course("3", "Php"), new Course("4", "C语言") };
coursesToSelect.addAll(Arrays.asList(course));
Course temp3 = (Course) coursesToSelect.get(2);
Course temp4 = (Course) coursesToSelect.get(3);
System.out.println("再次添加课程:" + temp3.id + ":" + temp3.name);
System.out.println("再次添加课程:" + temp4.id + ":" + temp4.name);
// 将指定 collection 中的所有元素都添加到此 collection 指定的位置中
Course[] course2 = { new Course("5", "高数"), new Course("6", "英语") };
coursesToSelect.addAll(2, Arrays.asList(course2));
Course temp5 = (Course) coursesToSelect.get(2);
Course temp6 = (Course) coursesToSelect.get(3);
System.out.println("AddAll二次添加课程:" + temp5.id + ":" + temp5.name);
System.out.println("AddAll二次添加课程:" + temp6.id + ":" + temp6.name);
}
/**
* 取得List中的元素的方法
*
*/
public void testGet(){
//获取list的长度
int size = coursesToSelect.size();
System.out.println("有如下课程待选:");
for(int i=0;i
四、泛型。
泛型规定了某个集合只可以存放特定类型的对象,会在编译期间进行类型检查,可以直接按指定类型获取集合元素。
泛型集合中不仅可以存放泛型类型的实例,也可以存放泛型的子类型。
泛型类:
package com.collection;
import java.util.ArrayList;
import java.util.List;
public class TestGeneric {
/**
* 带有泛型---Course,的List的属性
* @author Timor
*
*/
public List
courses;
/**
* 重写构造器,初始化course泛型
*/
public TestGeneric(){
this.courses = new ArrayList
();
}
/**
* 测试添加
* @param args
*/
public void testAdd(){
Course course = new Course("1","Java");
courses.add(course);
// 泛型集合中,不能添加泛型规定类型及其子类型之外的对象,否则报错。
// courses.add("能否添加其他类型的数据");
Course course2 = new Course("2","PHP");
courses.add(course2);
}
/**
* 通过foreach访问
* @param args
*/
public void testForEach(){
//泛型不用强转
for(Course cr : courses){
System.out.println(cr.id + ":" +cr.name);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TestGeneric tg = new TestGeneric();
tg.testAdd();
tg.testForEach();
}
}