集合概述:
1、集合概念:java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象
2、集合的作用:1、在类的内部,对数据进行组织;2、简单而快速的搜索大数量的条目;3、有的集合接口,提供了一系列排列有序的元素,并且可以在序列中间快速的插入或者删除有关的元素;有的集合接口,提供了映射关系,可以通过关键字(key)去快速查找到对应的唯一对象,而这个关键字可以是任意类型。
3、集合与数组的区别:1、数组的长度固定,集合长度可变;2、数组只能通过下标访问元素,类型固定,而有的集合可以通过任意类型查找所映射的具体对象

1.数组容量固定 集合可以动态扩展

数组只能通过数组下标 只能通过遍历 集合有映射关系 可以方便查找.

Java集合框架两大根接口:

Collection 和 Map
Collection子接口:List Queue Set List(序列)&queue(队列)可重复有序 Set(集)无序不可重复
List——ArrayList ——LinkedList
Queue——LinkedList
Set——HashSet
Map——HashMap哈希表

二、List接口的实现类:ArrayList
1、List是元素【有序并且可以重复】的序列,称为序列
2、***List可以精确的控制每个元素的插入位置,或者删除某个位置的元素——操作和位置有关
3、ArrayList——数组序列,是List的一个重要实现类

4.可以实现学生选课系统

list 类型是接口,不能把类直接实例化,需要调用list 的实现类Arraylist 去实现

public class ListTest {
public List CoursesToselect; //就像 public int stuNum;
public ListTest(){
/**
* 用于存放已选课程的list
*/
this.CoursesToselect=new ArrayList();
}}

list 元素的起始位置为0 get(0)

对象存入集合都变成Object类型,不是原来的类型,取出时需要类型转换

add 可以指定元素添加的位置

add 传进去的参数不能大于它的位置长度

选课容器

package com.imooc;


 import java.util.ArrayList;
 import java.util.List;


 public class ListTest {
public List CoursesToselect;
public ListTest(){
/**
* 用于存放备选课程的list,有了容器,就要往里面添加课程了。 用testAdd()方法
*/
this.CoursesToselect=new ArrayList();
}
/**
* 用于往CoursesToselect中添加备选课程 
*/
public void testAdd(){
Course cr1=new Course("1","化学"); //课程对象的实例
CoursesToselect.add(cr1);//通过调用add方法添加到备选课程List中
Course temp=(Course) CoursesToselect.get(0);//对象存入集合都变成Object类型,取出时需要类型转换,get 方法取得添加的课程
System.out.println("添加了课程 \t"+temp.id+":"+temp.name);

Course cr2=new Course("2","物理");
CoursesToselect.add(0, cr2);
Course temp2=(Course) CoursesToselect.get(0);
System.out.println("添加了课程 \t"+temp2.id+":"+temp2.name);

Course cr3=new Course("3","生物");
CoursesToselect.add(4, cr3);//长度为2,4>2,下标越界异常
}
public static void main(String[] args) {
ListTest lt=new ListTest();
lt.testAdd();
}
 }

往list中添加元素(4种方法)

add
Course cr1=new Course("1","化学"); //课程对象的实例
CoursesToselect.add(cr1);//通过调用add方法添加到备选课程List中
Course temp=(Course) CoursesToselect.get(0);//对象存入集合都变成Object类型,取出时需要类型转换,get 方法取得添加的课程
System.out.println("添加了课程 \t"+temp.id+":"+temp.name);

Course cr2=new Course("2","物理");
CoursesToselect.add(0, cr2);
Course temp2=(Course) CoursesToselect.get(0);
System.out.println("添加了课程 \t"+temp2.id+":"+temp2.name);addAll
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+";\n"+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+";\n"+temp6.id+":"+temp6.name);把list中的元素取出来(get方法)
public void testGet(){
int size=CoursesToselect.size();//得到list的长度
System.out.println("有如下课程待选:");
for(int i=0;i<size;i++){
Course cr=(Course) CoursesToselect.get(i);
System.out.println("课程"+cr.id+":"+cr.name);
}
}

通过迭代器来遍历list//迭代器遍历集合中的元素,不具备存储元素的功能

public void testIterator(){
Iterator it=CoursesToselect.iterator();//通过集合的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中的元素

public void testModify(){
CoursesToselect.set(4, new Course("7","毛概"));
}

 删除list中的元素

remove
public void testRemove(){
Course cr=(Course) CoursesToselect.get(4);
System.out.println("我是课程:"+cr.id+":"+cr.name+",我即将被删除");
CoursesToselect.remove(cr);
System.out.println("成功删除课程");
testForeach();
}
public void testRemove(){
System.out.println("即将删除4位置上的课程");
CoursesToselect.remove(4);
System.out.println("成功删除课程");
testForeach();
}removeall
public void testRemove(){
System.out.println("即将删除4位置和5位置上的课程");
Course []courses={(Course) CoursesToselect.get(4),(Course) CoursesToselect.get(5)};
CoursesToselect.removeAll(Arrays.asList(courses));
System.out.println("成功删除");
testForeach();
}

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

泛型——某个集合只可以存放特定类型的对象

带有泛型的

list——public List<Course> courses;
public class testGeneric {
public List<Course> courses;
public testGeneric(){
this.courses=new ArrayList<Course>();
}
public void testAdd(){
Course cr1=new Course("1","大学语文");
courses.add(cr1);
Course cr2=new Course("2","神话故事");
courses.add(cr2);
//courses.add("i am a person");
}
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();
}


 }

泛型不能使用基本类型,必须使用其包装类

List<int> list=new Arraylist<int>();//错的
List<Integer> list=new Arraylist<Integer>();//正确