Collection(集合)和Map
集合:
集合概述:java中的集合类:是一个工具类,就像是容器,存储任意数量的具有共同属性的对象
集合的作用:
1.在类的内部,对数据进行组织;
2.简单而快速的搜索大数量的条目
3.有的集合接口,提供了一系列排列有序的元素,并可以在徐磊中那快速的插入或者删除有关元素
4.有的集合接口,提供了映射关系,可以通过关键字(可以 )去快速查找对应的唯一对象,而这个关键字可以是任意类型
(数组和集合的区别 :
1.数组的长度固定,集合长度可变(可以自动扩展)
2.数组只能通过下边访问元素,类型固定,而有的集合可以通过任意类型查找所映射的具体对象)
集合框架的组成:
根接口
Collection:List Queue Set(集:无序不可重复)
Map:HashMap
Collection接口 | 名称:属性 | 实现类 |
List | 序列:有序可重复 | ArrayList\LinkedList |
Queue | 队列:有序可重复 | LInkedList |
Set | 集:无序不可重复 | HashSet |
Collection接口:
List接口:
List方法及实现
//新建list并且规定其泛型
public static List<Course> coursesToSelect;
//测试list的添加方法
//list.add
// public void add(int index, Object element){}
//index添加的位置,element 添加的元素
public void testAdd(){
Course cr1=new Course("1","数据结构");
coursesToSelect.add(cr1);
Course temp= (Course) coursesToSelect.get(0);
// System.out.println("添加课程:"+temp.name+" 编号为:"+temp.id+" 成功");
Course cr2=new Course("2","c语言");
coursesToSelect.add(0,cr2);
Course temp2= (Course) coursesToSelect.get(0);
// System.out.println("添加课程:"+temp2.name+" 编号为:"+temp2.id+" 成功");
//数组只有俩个元素不能越界访问下下个元素
/*Course cr3=new Course("3","网络安全");
coursesToSelect.add(-1,cr3);*/
/*coursesToSelect.add(cr1);
Course temp0= (Course) coursesToSelect.get(2);
System.out.println("添加课程:"+temp0.name+" 编号为:"+temp0.id+" 成功");
*/
//按数组添加到list,先定义数组,再使用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.name+"编号为:"+temp3.id+" "+temp4.name+"编号为:"+temp4.id);
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.name+"编号为:"+temp5.id+" "+temp6.name+"编号为:"+temp6.id);
}
//在使用get方法时,返回的对象为object对象,需要进行转化
遍历List集合的三种方法:
//通过get方法for循环遍历
public void testGet(){
System.out.println("——————————现有如下课程可选——————————");
for (int i=0;i<coursesToSelect.size();i++)
{
//使用了get方法获取的对象都为object类型
Course c=(Course) coursesToSelect.get(i);
System.out.println("课程名: "+c.name+" 编号为: "+c.id);
}
}
// 通过迭代器遍历List
public void testIterator(){
//新建一个迭代器
Iterator it=coursesToSelect.iterator();
//hasNext()检查是否有元素有返回true
while (it.hasNext()){
System.out.println("——————————现有如下课程可选(迭代器)——————————");
for (int i=0;i<coursesToSelect.size();i++)
{
//使用了get方法获取的对象都为object类型
Course cr=(Course) it.next();
System.out.println("课程名: "+cr.name+" 编号为: "+cr.id);
}
}
}
// 通过foreach方法访问集合元素
public void testForeach(){
System.out.println("——————————现有如下课程可选(foreach)——————————");
for (Object obj:coursesToSelect){
Course cr=(Course) obj;
System.out.println("课程名: "+cr.name+" 编号为: "+cr.id);
}
}
List 修改数据和删除数据
//通过set方法修改元素
public void testModify(){
coursesToSelect.set(4,new Course("7","毛概"));
}
//删除
//删除单个元素
public void testRemove(){
Course cr= (Course) coursesToSelect.get(4);
System.out.println("课程id为:"+cr.id+"名称为:"+cr.name);
coursesToSelect.remove(cr);
System.out.println("即将删除4上的元素");
coursesToSelect.remove(4);
//删除多个元素
System.out.println("即将删除4和5上的元素");
Course[]courses={(Course) coursesToSelect.get(4), (Course) coursesToSelect.get(5)};
coursesToSelect.removeAll(Arrays.asList(courses));
System.out.println("成功删除课程");
}
Map
//新建Map并且添加泛型
public static Map<String,Student> students;
//添加数据使用put方法
students.put(ID,newStudent);
//使用keySet方法返回Map所有键的Set集合
public void testKeySet(){
Set<String>keySet=students.keySet();
//取得students的容量
System.out.println("总共有"+students.size()+"个学生");
//遍历keySet对象,取得每一个键,在用get获取value
for (String stuId:keySet){
Student st=students.get(stuId);
if (st!=null){
System.out.println("学生:"+st.name+"id:"+st.id);
}
}
}
删除Map中的映射
//使用remove方法通过key值删除
public void testRemove(){
while (true){
//提升删除学生id
System.out.println("请输入要删除的学生id");
//从键盘获取学生id
Scanner console=new Scanner(System.in);
String ID=console.next();
Student st=students.get(ID);
if (st==null){
//提示id不存在
System.out.println("该id不存在");
continue;
}
students.remove(ID);
System.out.println("成功删除学生:"+st.name);
break;
}
}
修改Map中的值
public void testModify(){
//请输入要修改的学生id
System.out.println("请输入要修改的学生id");
Scanner console=new Scanner(System.in);
while (true){
String stuID=console.next();
Student student=students.get(stuID);
if (student==null){
System.out.println("该id不存在");
continue;
}
System.out.println("当前学生id,所对应的学生为:"+student.name);
System.out.println("输入新的学生姓名");
String name=console.next();
Student newStudent=new Student(stuID,name);
students.put(stuID,newStudent);
System.out.println("修改成功");
break;
}
}
遍历Map集合
//通过entrySet方法遍历Map
public void testEntrySet(){
//通过entrySet方法遍历Map
Set<Map.Entry<String, Student>> entrySet=students.entrySet();
for (Map.Entry<String, Student>entry:entrySet){
System.out.print("id:"+entry.getKey());
System.out.print("姓名:"+entry.getValue().name);
System.out.println(" ");
}
}