集合可以看作是一个容量,如红色的衣服可以看做是一个集合,所有Java类中的书可以看作一个集合。对于集合中的各个对象很容易将其放到集合中,也很容易将其取出来,还可以将其按照一定的顺序进行摆放。Java中提供了不同的集合类,这些类具有不同的存储对象的方式,并提供了相应的方法以方便用户进行遍历、添加、删除、以及查找指定的对象。
集合类存放于java.util包中。
集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。
集合类型主要有3种:set(集)、list(列表)和map(映射)。
1、集
集(set)是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。对集中成员的访问和操作是通过集中
对象的引用进行的,所以集中不能有重复对象。集也有多种变体,可以实现排序等功能,如TreeSet,它把对象添加到集中的操作将变为按照某种比较规则将其插
入到有序的对象序列中。它实现的是SortedSet接口,也就是加入了对象比较的方法。通过对集中的对象迭代,我们可以得到一个升序的对象集合。
2、列表
列表的主要特征是其对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾,当然,它与根本没有顺序的集是不同的。
列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列。
3、映射
映射与集或列表有明显区别,映射中每个项都是成对的。映射中存储的每个对象都有一个相关的关键字(Key)对象,关键字决定了对象在映射中的()
存储位置,检索对象时必须提供相应的关键字,就像在字典中查单词一样。关键字应该是唯一的。
List的常用方法:
增:
Arrays.asList(arr)`把一个数组转换成List集合
list.add(el)` 把一个元素添加到集合的队尾位置
list.add(index, el)` 把一个元素添加到集合的指定位置
list.addAll(List)` 把一个集合添加到另一个集合的队尾位置
list.addAll(index, List)` 把一个集合添加到另一个集合的指定位置
删:
list.remove(el)` 删除集合中首次出现的指定的元素
list.remove(index)` 删除集合中指定位置的元素
list.removeAll(el)` 删除集合中所有元素
改:
list.set(index, el)` 用指定的元素替换列表中指定位置的元素
查:
通过for循环遍历集合
通过foreach循环遍历集合
通过迭代器(Iterator)遍历集合
以下是一个简单的小程序:
public class Course {
public String id;
public String name;
public Course(String id, String name) {
this.id = id;
this.name = name;
}
}
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();
}
}
public class ListTest {
public List coursesToSelect;
public ListTest() {
this.coursesToSelect = new ArrayList();
}
public void TestAdd() {
Course c1 = new Course("1", "数据结构");
coursesToSelect.add(c1);
Course temp = (Course)coursesToSelect.get(0);
System.out.println("添加了课程:"+temp.id+":"+temp.name);
Course c2 = new Course("2", "C语言");
coursesToSelect.add(0, c2);
Course temp2 = (Course)coursesToSelect.get(0);
System.out.println("添加了课程:"+temp2.id+":"+temp2.name);
Course[] course = {new Course("3", "离散数学"), new Course("4", "汇编语言")};
coursesToSelect.addAll(Arrays.asList(course));
Course temp3 = (Course)coursesToSelect.get(2);
Course temp4 = (Course)coursesToSelect.get(3);
System.out.println("添加了两门课程:"+temp3.id+":"+temp3.name+" "+temp4.id+":"+temp4.name);
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("添加又两门课程:"+temp5.id+":"+temp5.name+";"+temp6.id+":"+temp6.name);
}
//遍历list中元素的方法(for循环)
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元素的方法(iterator)
public void testIterator() {
Iterator it = coursesToSelect.iterator();
System.out.println("有如下课程(iterator):");
while(it.hasNext()) {
Course cr = (Course)it.next();
System.out.println("课程"+" "+cr.id+":"+cr.name);
}
}
//遍历list元素的方法(foreach)
public void testForEach() {
System.out.println("有如下课程(foreach):");
for(Object obj:coursesToSelect) {
Course cr = (Course)obj;
System.out.println("课程"+" "+cr.id+":"+cr.name);
}
}
//修改list中元素方法
public void testModify() {
coursesToSelect.set(2, new Course("0", "Python"));
}
//删除list中元素
public void testRemove() {
Course cr = (Course)coursesToSelect.get(2);
coursesToSelect.remove(cr);
}
public static void main(String args[]) {
ListTest lt = new ListTest();
lt.TestAdd();
//lt.testGet();
//lt.testIterator();
lt.testModify();
lt.testForEach();
lt.testRemove();
lt.testForEach();
}
}