《Java高级程序设计》课件-学习情境2 接口_第1页
《Java高级程序设计》课件-学习情境2 接口_第2页
《Java高级程序设计》课件-学习情境2 接口_第3页
《Java高级程序设计》课件-学习情境2 接口_第4页
《Java高级程序设计》课件-学习情境2 接口_第5页
已阅读5页,还剩119页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

List接口一、应用场景二、List接口三、ArrayList常用方法四、List一般用法本学习情境主要内容3一、应用场景涉及到“栈”、“队列”、“链表”等操作,应该考虑使用List集合。二、List接口List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地将实现了List接口的对象称为List集合。2.1List接口List集合中允许出现重复的元素;List集合中所有的元素是以一种线性方式进行存储的;List集合中的元素可以通过索引(顺序号:元素在集合中处于的位置信息)来访问;List集合中的元素是有序的,即元素的存入顺序和取出顺序一致。List接口特点2.2List接口的实现类List接口的实现类主要有:ArrayListLinkedListVectorStack1.ArrayList集合java.util.ArrayList是基于数组实现的非线程安全的集合。它由数组实现,随机访问效率高。ArrayList是最常用的集合。特点:元素增删慢,但查找快。适合场景:适合经常查询数据、遍历数据的场合。由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。2.LinkedList集合java.util.LinkedList是基于链表实现的非线程安全的集合。特点:元素增删快,但查找慢适合场景:适合经常添加元素、删除元素的场合。在开发时,LinkedList集合也可以作为堆栈,队列或双端队列的结构使用3.VectorVector是基于数组实现的线程安全的集合。线程同步(方法被synchronized修饰),性能比ArrayList差。但是ArrayList是非线程安全的,而Vector是线程安全的。4.StackStack是栈,它继承于Vector。它的特性是:先进后出(FILO,FirstInLastOut)。2.3List接口实现类的适用场合(1)对于需要快速插入,删除元素,应该使用LinkedList。(2)对于需要快速随机访问元素,应该使用ArrayList。(3)对于单线程环境,应该使用非同步的类ArrayList。(4)对于多线程环境,应该使用同步的类Vector。三、ArrayList常用方法方法摘要返回值类型方法名说明booleanadd(Ee)将指定的元素添加到此列表的尾部voidadd(intindex,Eelement)将指定的元素插入此列表中的指定位置Objectremove(intindex)移除此列表中指定位置上的元素booleanremove(Objecto)移除此列表中首次出现的指定元素(如果存在)Objectset(intindex,Objectobj)用指定的元素替代此列表中指定位置上的元素Objectget(intindex)返回此列表中指定位置上的元素intindexOf(Objectobj)返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回-1intlastIndexOf(Objectobj)返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回-1四、List接口一般用法List是接口,在使用List集合时,通常使用其实现类通过new来创建一个List集合对象。由于List使用了泛型,在实例化时是需传递类型参数的。1.创建一个List接口的对象//使用ArrayList类实例化List集合List<Student>studentList=newArrayList<Student>();

ArrayLIst使用了泛型,实例化时传递一个类型参数3.删除指定位置的元素studentList.remove(1);2.向list中存值studentList.add(“张三”);studentList.set(1,“李四”);//设置索引位置为1的对象e修改4.遍历Listfor(Stringstu:studentList){System.out.println(stu.toString());}使用增强for循环遍历小结List接口继承自Collection接口,是单列集合。List集合中的元素是有序、可重复。List接口的实现类主要有ArrayList,LinkedList,Vector,Stack等。List是接口,使用其实现类通过new实例化一个对象。通过对象调用其实例方法实现CRUD操作。使用增强for循环实现遍历List集合。List接口的使用实例一、任务描述二、任务分析设计三、任务实施四、运行结果

本学习情境主要内容19一、任务描述使用List存取用户信息,并做CRUD即增删改查操作。任务需求:定义用户类User。使用ArrayList集合类,存取用户信息。做CRUD操作。使用多种方式遍历该集合。二、任务分析、设计首先定义一个实体类User封装用户的基本信息,然后采用List集合进行存储。由于List是一个接口,需要使用它的实现类来创建集合对象,通过该对象的方法实现对用户基本信息的CURD操作。其类图如图2-1所示三、任务实施1.定义User类publicclassUser{Stringname;Stringemail;PublicUser(Stringname,Stringemail){ =name;

this.email=email;}//省略setter和getter方法}封装属性、方法、构造函数等2.创建测试类创建测试类UserListTest,在main()方法中实现CRUD功能。第一步,创建list对象userList这里使用List接口的实现类ArrayList类通过new来创建,由于List采用了泛型,需要传递User类参数第二步,向集合中添加元素。userList.add(newUser("小明","xiaoming@"));Userxiaozhang=newUser("小张","xiaozhang@");userList.add(xiaozhang);首先创建User的对象,再调用list集合的add()方法向List集合的尾部或指定位置添加指定的元素首先创建User的对象,再调用list集合的set()方法替换列表中指定位置的元素Userxiaohu=newUser("小胡","xiaohu@");userList.set(1,xiaohu);第三步,替换元素调用list集合的remove(intindex)方法移除列表中指定位置的元素//移除列表中的元素userList.remove(1);第四步,移除列表中的元素第五步,使用列表迭代器//列表迭代器的用法。listIterator()方法返回此列表元素的列表迭代器。ListIterator<User>iterator=userList.listIterator();Useru=iterator.next();System.out.println(u.toString());System.out.println("后面还有没有元素?"+iterator.hasNext());首选调用list集合的listIterator()方法返回此列表元素的列表迭代器。然后使用迭代器的hasNext()和next()方法来处理集合。hasNext()方法,如果迭代器具有更多元素,则返回true。next()方法,返回迭代器中的下一个元素。利用迭代器最大的好处就程序员不用再去为了索引越界等等异常所苦恼了,只需在迭代过程中对列表元素进行操作即可。第六步,遍历list集合有多种方法遍历list集合方法1:使用迭代器,进行循环遍历for(Iterator<User>it1=userList.iterator();it1.hasNext();){ Useruser=it1.next();

System.out.println(user.toString());}首选调用userList.iterator()方法生成迭代器,然后使用for循环调用迭代器的hashNext、next方法,遍历集合中的元素方法2:使用增强for循环for(元素类型T元素变量x:集合对象){引用了x的java语句;

}增强for循环语句格式如下for(Usertmp:userList){

System.out.println(tmp.toString());}例如增强for循环是for语句的特殊简化版本,相对于for来说方便了对容器的遍历。在遍历数组、集合方面,foreach为开发人员提供了极大的方便。习惯上将这种特殊的for语句格式称之为“foreach”语句,即“for每一个”的意思。foreach并不是一个关键字。此方法需重点掌握。这种方法在遍历数组和Map集合的时候同样适用。方法3:使用List集合的get(i)方法进行for循环遍历,获取集合中的每个元素for(inti=0;i<list.size();i++){

System.out.println(userList.get(i).toString());}for循环控制下标从0到size()长度,通过调用list集合的get()方法,来获取每一个元素四、运行结果这是最后的运行结果,CRUD均操作成功小结本学习情境通过一个实例讲述了:List集合的基本使用,包括使用其实现类创建List对象向list集合中添加元素从list集合中删除元素替换集合中指定位置的元素迭代器的使用几种遍历方法等等更多的和更为详细的方法调用请进一步阅读1.JavaAPI关于List接口和其实现类Set接口一、应用场景二、Set接口1.Set接口2.Set接口的实现类3.Set接口实现类的适用场合三、HashSet的常用方法四、Set接口的一般用法本学习情境主要内容41一、应用场景在集合中当需要元素唯一时,使用Set集合。二、Set接口Set接口是继承于Collection接口,用于存储不含重复元素的集合。2.1Set接口不允许出现重复元素;集合中的元素位置无顺序(存取和读取的顺序可能不一样);Set集合没有索引;有且仅有一个值为null的元素。Set接口有如下的特点2.2Set接口的实现类Set接口的实现类主要有HashSet、TreeSet、LinkedHashSet。1.HashSet底层是包装了一个HashMap实现的采用HashCode算法来存取集合中的元素,具有比较好的读取和查找性能通过equals()和HashCode()来判断两个元素是否相等非线程安全2.LinkedHashSet继承HashSet,本质是LinkedHashMap实现集合中的元素是有序的,根据HashCode的值来决定元素的存储位置,同时使用一个链表来维护元素的插入顺序非线程安全3.TreeSet是一种排序的Set集合,实现了SortedSet接口,底层是用TreeMap实现的,本质上是一个红黑树相对HashSet来说,TreeSet提供了一些额外的按排序位置访问元素的方法,例如first(),last(),lower(),higher(),subSet(),headSet(),tailSet()排序分两种:自然排序(存储元素实现Comparable接口)和定制排序(创建TreeSet时,传递一个自己实现的Comparator对象)2.3Set接口实现类的适用场合HashSet应用于数据的去重的场合LinkedHashSet应用于数据需要去重的基础上且有序的场合TreeSet应用于数据需要去重,且数据按照特定大小进行排序的场合三、HashSet常用方法方法摘要返回值类型方法名说明booleanadd(Ee)如果此set中尚未包含指定元素,则添加指定元素。voidclear()从此set中移除所有元素。booleancontains(Objecto)如果此set包含指定元素,则返回true。booleanisEmpty()如果此set不包含任何元素,则返回true。Iterator<E>iterator()返回对此set中元素进行迭代的迭代器。booleanremove(Objecto)如果指定元素存在于此set中,则将其移除。intsize()返回此set中的元素的数量(set的容量)。四、Set接口的一般用法Set是一个接口,在使用Set集合时,通常使用其实现类通过new来实例化一个对象。1.创建HashSet类的对象2.添加元素HashSet<String>stringSet=newHashSet<String>();stringSet.add("abc");HashSet使用了泛型,这里传递了一个类型参数String,即表示一个存储字符串类型的集合3.删除元素stringSet.clear();//从此set中移除所有元素。stringSet.remove(Objecto);//在此集合中移除指定的元素4.遍历Set的两种方法方法1,使用iterator迭代遍历Set<String>stringSet=newHashSet<String>();Iterator<String>it=stringSet.iterator();//构建迭代器while(it.hasNext()){Stringstr=it.next();

System.out.println(str);}方法2,使用增强for循环for(Strings:stringSet){

System.out.println(s);}小结Set接口是继承于Collection的接口,用于存储不含重复元素的集合。Set接口中的元素无序、不可重复。Set接口的实现类主要有HashSet、TreeSet、LinkedHashSet。Set是接口,使用其实现类通过new实例化一个集合对象。通过对象调用其实例方法实现CRUD操作。可使用增强for循环实现遍历。Set接口的使用实例一、任务描述二、任务分析设计三、任务实施四、运行结果

本学习情境主要内容58一、任务描述使用Set存储学生信息,并进行CRUD操作。任务需求:定义实体类学生类。使用HashSet集合类,存取学生信息。做CRUD操作。使用多种方式遍历该集合。二、任务分析设计一个班级里有若干个学生,首先定义一个实体类学生类封装学生的基本信息,然后通过一个Set集合进行存储,并实现对学生基本信息的CURD。其类图关系如图2-1所示。三、任务实施1.创建学生类StudentclassStudent{privateStringname;privateintage;publicStudent(Stringname,intage){ =name;

this.age=age;}

//省略setter和getter方法@OverridepublicStringtoString(){ return"Student["+name+","+age+"]";}}封装学生的基本信息,setter和getter方法封装构造函数等2编写测试类定义测试类StudentSetTest,在main方法中编写代码进行测试第一步,创建Set的对象HashSet<Student>studentSet=newHashSet<Student>();Set是接口,实例化时使用其实现类,这里使用HashSetHashSet使用了泛型,这里要传递类型Student类第二步,向Set集合中添加元素Studentstu1=newStudent("张三",18);studentSet.add(stu1);首先创建学生类的对象,再通过set集合的add方法,向Set集合中添加元素。同样的,添加多个元素stu2,stu3第三步,移除集合中指定的元素studentSet.remove(stu2);调用set集合的remove()方法,移除指定的元素第四步,判断Set集合中是否包含指定的元素boolean

isContain=false;isContain=studentSet.contains(stu1);System.out.println(isContain);调用set集合的contains方法,判断Set集合中是否包含指定的元素,该方法返回布尔类型的值第五步,迭代器的使用Iterator<Student>iterator=studentSet.iterator();Students=iterator.next();System.out.println("此Set集合中第一个元素是:"+s.toString());System.out.println("还有没有下一个元素?"+iterator.hasNext());System.out.println("下一个是:"+iterator.next());首先调用set集合的iterator方法,生成该集合的迭代器,然后调用迭代器的hasNext()和next()方法hasNext()方法,如果迭代器具有更多元素,则返回true。next()方法,返回迭代器中的下一个元素。第六步,遍历HashSet有多种遍历方法方法1:使用迭代器Iterator进行遍历Iterator<Student>it=studentSet.iterator();while(it.hasNext()){ Studentstudent1=it.next();

System.out.println(student1.toString());}首先调用set集合的iterator方法,生成迭代器,然后通过循环调用迭代器的hasNext()和next()方法,循环遍历set集合中的每一个元素

方法2,使用增强for循环for(Studentstudent2:studentSet){

System.out.println(student2.toString());}此方法需重点掌握。这种方法在遍历数组和Map集合的时候同样适用。使用for(元素类型元素变量:集合)的形式遍历集合中的每一个元素方法3:使用Lambda表达式遍历Set集合studentSet.forEach((Studentstu)->System.out.println(stu));调用set集合的forEach(Consumer<?superT>action)方法。action,代表要对每个元素执行的操作。forEach(Consumer<?superT>action)方法是Iterable<E>接口的方法,HashSet实现了Iterable<E>接口四、运行结果这是最后的运行结果小结本学习情境通过一个实例讲述了:Set集合的基本使用,包括使用其实现类创建set对象向Set集合中添加元素从Set集合中删除元素迭代器的使用几种遍历方法等等更多的和更为详细的方法调用请进一步阅读1.JavaAPI关于List接口和其实现类Map接口一、应用场景二、Map接口三、HashMap的常用方法四、Map接口的一般用法本学习情境主要内容79一、应用场景Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value。当存储的信息是需要键值对形式的时候,需要采用Map集合。二、Map接口Map不是collection的子接口或者实现类。Map是一个接口。2.1Map接口Map提供了一种映射关系,它存储的内容是以键值对(key-value)映射的元组Entry。Entry将键值对的对应关系封装成了键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对对象中获取相应的键与值。Map中的类型参数:K-此映射所维护的键的类型V-映射值的类型Map集合是一个双列集合,一个元素包含两个值(一个key,一个value)Map集合中的元素,key和value的数据类型可以相同,也可以不同Map集合中的元素,key不允许重复,value可以重复Map集合中的元素,key和value是一一对应的Map接口有如下的特点2.2Map接口的实现类Map接口的实现类常用的有HashMapLinkedHashMapHashtableTreeMap1.HashMap存储结构采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。特点:线程不安全,效率高哈希表依赖两个方法:hashCode()和equals()2.LinkedHashMap存储结构采用的哈希表+双向链表结构。由链表保证元素有序。由哈希表保证元素唯一。需要重写键的hashCode()方法、equals()方法。LinkedHashMap最大的特点在于有序,但是它的有序主要体现在先进先出(FIFO)上。3.HashtableHashtable是线程安全的一个Map实现类,它实现线程安全的方法是在各个方法上添加了synchronized关键字。但是现在已经不再推荐使用HashTable了,因为现在有了ConcurrentHashMap这个专门用于多线程场景下的Map实现类,其大大优化了多线程下的性能。底层数据结构是哈希表。线程安全,效率低哈希表依赖两个方法:hashCode()和equals()4.TreeMapTreeMap是一个很常用的Map实现类,一个很大的特点就是会对Key进行排序,使用了TreeMap存储键值对,再使用iterator进行输出时,会发现其默认采用key由小到大的顺序输出键值对,如果想要按照其他的方式来排序,需要重写也就是override它的compartor接口2.3Map接口实现类的适用场合HashMap是基于“拉链法”实现的散列表。它是线程不安全的Map,方法上都没有synchronized关键字修饰。一般用于单线程程序中。LinkedHashMap主要依靠双向链表和hash表来实现的,通常提供的是遍历顺序符合插入顺序,它的有序主要体现在先进先出FIFO上。适用于一些特定应用场景,例如“最近最不常用”。Hashtable也是基于“拉链法”实现的散列表。它一般用于多线程程序中。TreeMap是有序的散列表,它是通过红黑树实现的。很大的特点就是会对Key进行排序。它一般用于单线程中存储有序的映射。三、HashMap常用方法方法摘要返回值类型方法名说明Vput(Kkey,Vvalue)在此映射中关联指定值与指定键。Vget(Object

key)

返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回

null。Set<k>keySet()返回此映射中所包含的键的

Set

视图。Collection<V>values()返回此映射所包含的值的

Collection

视图。Vremove(Object

key)从此映射中移除指定键的映射关系(如果存在)。booleancontainsValue(Object

value)如果此映射将一个或多个键映射到指定值,则返回

true。booleancontainsKey(Object

key)如果此映射包含对于指定键的映射关系,则返回true。booleanisEmpty()如果此映射不包含键-值映射关系,则返回

true。intsize()返回此映射中的键-值映射关系数。四、Map接口的一般用法Map是一个接口,在使用Map集合时,通常使用其实现类通过new来实例化一个对象。1.创建一个Map的对象//使用Map接口的实现类HashMap创建Map对象。//Key表示教师的工号,V表示教师类。Map<String,Teacher>teacherMap=newHashMap<String,Teacher>();2.向map中存值Teacherteac1=newTeacher("张三","男");Teacherteac2=newTeacher("李四","女");Teacherteac3=newTeacher("王五","男");teacherMap.put("001",teac1);teacherMap.put("102",teac2);teacherMap.put("201",teac3);3.从map中取值Teacherteacher=newTeacher();teacher=teacherMap.get(“001");4.查找Map中是否存在某个key值或value值teacherMap.containsKey("202");teacherMap.containsValue(teac3)5.返回Map集合中所有的KeySystem.out.println("所有的工号:");for(Strings:teacherMap.keySet())

{System.out.println(s);}6.返回Map集合中所有的ValueSystem.out.println("所有的教师:");for(Teachert:teacherMap.values()){

System.out.println(t.toString());}7.entrySet()的使用Set<Map.Entry<String,Teacher>>entrySet=teacherMap.entrySet();for(Entry<String,Teacher>entry:entrySet){ Strings=entry.getKey(); Teachert=entry.getValue();

System.out.println(s+","+t.getName()+","+t.getSex());}entrySet()方法返回包含映射关系的Set集合8.遍历Map的常用方法System.out.println("通过Key获取Value进行遍历:");for(Strings:teacherMap.keySet()){ Teachert=teacherMap.get(s);

System.out.println(t.toString());}(1)方法1:首先获取Map中所有的Key,再通过每一个Key获取其对应的Value值(2)方法2:获取Map中所有的ValueSystem.out.println("通过获取Map中所有的Value进行遍历:");for(Teachert:teacherMap.values()){

System.out.println(t.toString());}(3)方法3:首先通过HashMap.entrySet()得到键值对集合,再通过entrySet()进行获得键和值。System.out.println("通过entrySet()进行遍历:");for(Entry<String,Teacher>teac:teacherMap.entrySet()){

Strings=teac.getKey(); Teachert=teac.getValue();

System.out.println(s+","+t.toString());}小结Map不是collection的子接口或者实现类。Map提供了一种映射关系,它存储的内容是以键值对(key-value)映射的元组,Map中的键值对以Entry类型的对象实例形式存在。Map集合中的元素,key不允许重复,value可以重复。Map集合中的元素,key和value是一一对应的。Map是接口,在使用时是使用Map的实现类通过new来创建Map的对象。Map接口的使用实例一、任务描述二、任务分析设计三、任务实施四、运行结果

本学习情境主要内容104一、任务描述使用Map存储教师信息,并进行CRUD操作。任务需求:定义教师类。使用HashMap集合类,存取用户信息。做CRUD操作。使用多种方式遍历该集合。二、任务分析设计实现思路:首先定义实体类封装教师的基本信息,然后通过一个Map集合存储多个教师,由于Map是一个接口,使用它的实现类来创建集合对象;Map集合对象采用的是键值对的映射方式存储的,因此这里使用“工号-教师”映射。最后实现对教师集合进行CURD操作。其类图如图2-3所示三、任务实施3.1定义教师类publicclassTeacher{Stringname;Stringsex;publicTeacher(Stringname,Stringsex){ =name;

this.sex=sex;}//省略setter和getterf方法@OverridepublicStringtoString(){ return"Teacher["+name+","+sex+"]";}}定义Teacher类,封装教师的基本信息,setter和getter方法,以及构造函数等2编写测试类定义测试类TeacherMapTest,在main方法中编写代码进行测试第一步,创建Map对象Map<String,Teacher>teacherMap=newHashMap<String,Teacher>();Map是接口,实例化时使用其实现类,这里使用HashMapHashMap使用了泛型,采用“键-值”对的形式,需要传递K-V类型参数,这里采用“工号-教师”映射,

Key表示教师的工号字符串,V表示教师类。第二步,向Map集合中添加元素Teacherteac1=newTeacher("张三","男");teacherMap.put("001",teac1);首先创建教师类的对象,再通过Map集合的put方法,向Map集合中添加元素。同样的,添加多个元素teac2,teac3等第三步,移除集合中指定的元素teacherMap.remove("001");调用Map集合的remove()方法,移除指定键的元素第四步,替换指定的元素Teacherteacher=newTeacher("李思","女");teacherMap.replace("102",teac2,teacher);调用Map集合的replace(Kkey,VoldValue,VnewValue)方法,指定的key,用新值替换旧值第五步,查找Map中是否存在某个key值或value值System.out.println("此Map中是否包含工号202?"+teacherMap.containsKey("202"));System.ou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论