java集合框架概述(学习笔记)
1、集合概念:是一种工具类,是一种容器,存储任意数量的具有共同属性的对象。
2、集合的作用:
在类的内部,对数据进行组织;
简单而快速的搜索大数量的条目;
有的集合接口提供了一系列排列有序的元素,并且可以在序列中间快速的插入或者删除有关元素。
有的集合接口提供了映射关系,可以通过关键字去快速查找到对应的唯一对象,而这个关键字可以是任意类型。
3、数组长度有限,集合可以动态扩展。
数组只能通过下标访问对象,类型固定,而有的集合可以通过任意对象查找所映射的对象。
collection存储具体对象,map利用映射存储对象,key和value成对出现。
4.collection接口是list、set和queue的父接口;
4.1 list接口及其实现类——ArrayList
List 是元素有序并且可以重复的集合,被称为序列;
List可以精确的控制每个元素的插入位置,或删除某个位置元素;
ArrayList的底层由数组来实现。
4.2 实例
通过Map<String,Student>进行学生信息管理,其中key为学生ID,value为学生对象。通过键盘输入学生信息,对集合中的学生信息进行增删改查操作。
(1)创建map,承装学生类型对象
public Map<String,Student> students
(2)在构造器中初始化students属性
public MapTest(){
this.students = new HashMap<String,Student>();
}
(3)输入学生ID,判断是否被占用
public void testPut(){
scanner console = new Scanner(System.in);
String ID = console.next();
Student st = students.get(ID);
if(st==null){
System.out.println("请输入学生姓名:");
String name = console.next();//创建新的学生对象
Student newStudent = new Student(ID,name);//通过调用students的put方法,添加ID-学生映射;
students.put(ID,newStudent);
System.out.println("成功添加学生:"+students.get(ID).name);
}else{
System.out.println("该ID已被占用");
}}
(4)测试Map的KeySet方法
public void testKeySet(){
//通过KeySet方法返回Map中的所有键的集合。
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);
}}
(5)深处Map中的映射
public void testRemove()
{System.out.println("请输入要删除的学生ID!“);
Scanner console = new Scanner(System.in);
String ID = console.next();
Student st = students.get(ID);
if(st==null){
System.out.println("该ID不存在");}
students.remove(ID);
System.out.println("成功删除学生:"+st.name);
break;
}}
(6)通过entrySet方法来遍历Map
public void testEntrySet(){
//通过entrySet方法返回Map中的所有键值对
Set<Entry<String,Student> > entrySet = students.entrySet();
for(Entry<String,Student> entry:entrySet){
System.out.println("取得键:"+entry.GetKey());
System.out.println("对应的值为:"+entry.getValue().name);
}}
(7)修改Map中的映射
public void testModify(){
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;
}}
(8)测试List的contains方法(判断List中课程是否存在)
public void testListContains(){
Course course = coursesToSelect.get(ID);
System.out.println("取得课程:"+course.name);
System.out.println("备选课程中是否包含课程:"+course.name+","+courseToSelect.contains(course));
//创建一个新的对象,ID和名称与course对象完全一样
Course course2 = new Course(course.id,course.name);
System.out.println("新创建课程:"+course2.name);
System.out.println("备选课程中是否包含课程:"+course2.name+","+courseToSelect.contains(course2));
}
(9)重写equals方法
public boolean equals(Object obj){
if(this==obj){
return true;}
if(obj==null)
return false;
if(!(obj instanceof Course))
return false;
Course course = (Course) obj;
if(this.name==null){
if(course.name=null)
return true;
else
return false;}
else{
if(this.name equals(course.name))
return true;
else
return false;}}
(10)判断Set中课程是否存在(set中的contains方法)
public void testSetContains(){
System.out.println("请输入学生已选课程的名称:");
String name = console.next();
//创建一个新的对象,ID和名称与course对象完全一样
Course course2 = new Course(course.id,course.name);
System.out.println("新创建课程:"+course2.name);
System.out.println("备选课程中是否包含课程:"+course2.name+","+student.courses.contains(course2));
}
判断Set中课程是否存在:Set.contains(obj):首先判断hashCode()返回的hash码是否相等,然后根据equals(obj)方法判断是否相等,如果想要用元素的某一属性判断,需要重写hashCode()方法和equals(obj)方法
重写hashcode方法和equals方法eclipse可以自动生成。
(11)获取List中课程的位置(List中的indexOf(方法))
if(coursesToSelect.contains(course2))
System.out.println("课程"+course2.name+"的索引位置为:"+coursesToSelect.indexOf(course2));
(12)判断Map中是否包含指定的映射
public void testContainsKeyOrValue(){
//在Map中用containsKey()方法来判断是否包含某个Key值
//用containsValue()方法来判断是否包含某个value值
System.out.println("请输入要查询的学生ID:");
Scanner console = new Scanner(System.in);
Stringg id = console.next();
System.out.println("您输入的学生ID为:"+id+",在学生映射表中是否存在:"+students.containsKey(id));
if(students.containsKey(id))
System.out.println("对应的学生为:"+students.get(id).name);
//用containsValue方法,来判断是否包含某个value值
String name = console.next();
if(students.containsValue(new Student(null,name)));
System.out.println("在学生映射表中,确实包含学生:"+name);
}