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);

}

猜你喜欢

转载自blog.csdn.net/m0_37043120/article/details/81061387