黑马程序员java培训就业班笔记:day18(泛型、Map集合)总结

合集下载

黑马程序员JavaEE基础班知识点整理

黑马程序员JavaEE基础班知识点整理

黑马程序员JavaEE基础班知识点整理天地玄黄,宇宙洪荒。

如果你也和我一样看过不少网络小说,那你的想象力肯定很丰富,这点作为程序员是很重要的。

如果你和我一样喜欢《黑客帝国》《银河系漫游指南》《钢铁侠》《三体》《西部世界》。

那有可能科幻就是你坚持钻研技术的动力来源。

虽然我们暂时不能像黑客帝国里一样进入虚拟世界,不能像邓肯一样到宇宙尽头餐馆吃饭,没有贾维斯的智能管家系统,也不能把机器人做的无法分辨真伪,但是如果没有人们对未来的想象我们的技术就没有了追求。

这些追求促使我们不断的学习,让技术不断的前进,我相信这些电影电视小说里的情节一定会实现。

抱有这样的期待和好奇很多同学来到黑马学习技术,首先接触的就是黑马的基础班。

视频课程,讲义是必须的,但是我们还要有知识的梳理。

今天我们就整理了基础班的一下问答和笔试题供大家交流学习。

希望大家梳理一下自己的基础知识,基础知识是我们技术飞船的主架,主架坚固才能让我们在宇宙里航行的更远~理论知识点一、基础概念1、面向对象的理解并举例2、面向对象的三大特性,并分别阐述对每个特性的理解3、阐述成员变量和局部变量的区别4、构造方法的概念和作用,和一般方法的区别5、静态代码块、构造代码块、构造方法的特点及执行顺序6、描述类和对象的关系7、创建对象的步骤等二、IO流理论知识点:1、io流的基本流都有哪些,简单说说基本流的体系2、字节流和字符流的使用场景3、拷贝文本文件一般会用到哪个流?为什么?4、在io流中拷贝文件一般会用哪几个流?5、在io流的拷贝过程中,通过while 循环读取字节进行拷贝,需要通过哪个流的什么方法读取字节6、File类的常用方法都有哪些?7、遍历指定目录下的文件的所有名称,一般用什么方法?8、在io流中一般常用的字符编码集都有哪些?简单阐述几种9、在字符流中,带缓冲区的包装流都有哪一些?具体阐述一下。

10、为什么read()方法返回值是int类型?11、标准输入流和输出流是什么?三、集合理论知识点1、集合的由来2、数组和集合的使用场景3、数组和集合的区别4、集合的遍历5、在迭代集合中元素时,可不可以通过集合对象的方法操作集合中的元素?6、 List的三个子类的特点7、栈和队列数据结构8、 List有三个儿子,在不同的场景分别应该使用谁呢?9、 HashSet保证元素唯一的原理10、 TreeSet两种排序方式11、 list集合和set集合有什么区别?12、双列集合获取键和值的两种方式13、 HashMap和Hashtable的区别14、 Collection和Collections的区别?四、反射理论知识点1、反射概述2、获取类的字节码文件三种方式五、线程理论知识点1、线程的生命周期。

【黑马程序员】【成都校区】JAVA基础之泛型

【黑马程序员】【成都校区】JAVA基础之泛型

【黑马程序员】【成都校区】JAVA基础之泛型泛型,就是允许在定义类、接口、方法时使用类型形参,在声明变量、创建对象、调用方法时再传像List代表了只能存放String类型的对象的List集合。

在java中这样用://创建一个只能存放String类型的List集合List<String> a=new ArrayList<>();想知道为什么使用泛型,我们可以看看没有泛型之前,是怎么操作集合的。

public static void main(String[] args){//定义集合Map map=new HashMap();//存入元素map.put("hello","你好");map.put("how are you","吃了没");//取出元素System.out.println((String) map.get("hello"));System.out.println((String) map.get("how are you"));}因为集合是弱类型的,所以把对象放进集合时,没有进行检查,即使将一个int类型的数据放入Str 错。

只有在运行时才会爆出ClassCastException的异常。

这是第一个不方便之处。

注:【编译期:期:运行run,将代码启动起来】在集合中取出元素后,如果要使用,还需对其进行类型转换,这是第二个不方便之处。

为了解决以上两个不方便之处,我们可以使用泛型。

泛型能让集合“记住”其元素的数据类型,当存线”的形式报错。

下面我们将上述代码用泛型改写一下:public static void main(String[] args){//定义集合Map<String,String> map=new HashMap<>();//存入元素map.put("hello","你好");map.put("how are you","吃了没");//取出元素System.out.println( map.get("hello"));System.out.println(map.get("how are you"));}所以,泛型的好处是:·能够在编译时检查类型安全·所有的强制转换都是自动和隐式的,取出代码后,不用再进行强制类型转换不光是在集合类中可以使用泛型,在自定义类,接口,方法中也能使用泛型。

Java泛型总结

Java泛型总结

Java泛型总结1. 什么是泛型?泛型(Generic type 或者generics)是对Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。

可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。

可以在集合框架(Collection framework)中看到泛型的动机。

例如,Map 类允许您向一个Map 添加任意类的对象,即使最常见的情况是在给定映射(map)中保存某个特定类型(比如String)的对象。

因为Map.get() 被定义为返回Object,所以一般必须将Map.get() 的结果强制类型转换为期望的类型,如下面的代码所示:Map m = new HashMap();m.put("key", "blarg");String s = (String) m.get("key");要让程序通过编译,必须将get() 的结果强制类型转换为String,并且希望结果真的是一个String。

但是有可能某人已经在该映射中保存了不是String 的东西,这样的话,上面的代码将会抛出ClassCastException。

理想情况下,您可能会得出这样一个观点,即m 是一个Map,它将String 键映射到String 值。

这可以让您消除代码中的强制类型转换,同时获得一个附加的类型检查层,该检查层可以防止有人将错误类型的键或值保存在集合中。

这就是泛型所做的工作。

2. 泛型的好处Java 语言中引入泛型是一个较大的功能增强。

不仅语言、类型系统和编译器有了较大的变化,以支持泛型,而且类库也进行了大翻修,所以许多重要的类,比如集合框架,都已经成为泛型化的了。

这带来了很多好处:类型安全。

泛型的主要目标是提高Java 程序的类型安全。

通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。

黑马程序员_javaweb讲义和笔记资料

黑马程序员_javaweb讲义和笔记资料

黑马程序员_javaweb讲义和笔记资料一、简介黑马程序员是一家专业的IT培训机构,提供全面的编程技术培训服务。

javaweb是其中的一门重要课程,本文为黑马程序员_javaweb讲义和笔记的资料整理。

二、javaweb基础知识1. Java语言概述Java语言的特点和优势,Java开发环境的搭建等。

2. Servlet技术Servlet的基本概念、生命周期、Servlet容器等。

3. JSP技术JSP的基本语法、JSP指令、JSP内置对象等。

4. MVC设计模式MVC设计模式在javaweb开发中的应用和实践。

三、javaweb开发流程1. 需求分析分析项目需求,明确开发目标和功能要求。

2. 数据库设计设计数据库表结构,确定数据存储方式和关系。

3. 技术选型根据项目需求和开发要求,选择合适的技术框架和工具。

4. 编码实现使用Java语言和相关技术进行编码实现。

5. 测试调试运行和调试项目,确保功能的正确性和稳定性。

6. 部署上线将项目部署到服务器上线,提供给用户访问和使用。

四、javaweb开发常用框架和工具1. Spring框架Spring框架的介绍和核心特性,以及在javaweb开发中的应用。

2. SpringMVC框架SpringMVC框架的详细讲解,包括请求映射、数据绑定、视图解析等。

3. MyBatis框架MyBatis框架的使用方法和技巧,以及与数据库的集成。

4. Maven工具Maven的基本使用和配置,常用插件介绍。

五、javaweb开发中的常见问题和解决方案1. 数据库连接异常分析数据库连接异常的原因和解决方法。

2. 页面跳转问题页面跳转的实现方式和常见错误排查。

3. 表单数据验证表单数据验证的常用技术和插件,提高数据输入的准确性和安全性。

4. 性能优化优化javaweb应用的性能,减少响应时间和资源占用。

六、实例项目提供一个实例项目,通过对该项目的讲解和分析,帮助学员理解和掌握javaweb开发的方法和技巧。

黑马程序员java基础入门资料

黑马程序员java基础入门资料

黑马程序员java基础入门资料黑马程序员是一家专注于计算机培训的机构,拥有丰富的教学经验和优秀的师资力量。

在黑马程序员的Java基础入门课程中,学员将学习Java编程语言的基本语法、面向对象编程思想以及常用的Java 开发工具和技术。

以下是有关黑马程序员Java基础入门的资料,以帮助初学者快速入门。

一、Java基础知识概述1. Java的发展历程:介绍了Java的起源、发展和目前的应用领域。

2. Java的特点和优势:强调Java的跨平台性、面向对象和丰富的类库等优势。

3. Java的环境搭建:演示如何下载并安装Java开发工具包(JDK),以及配置环境变量。

二、Java语言基础1. Java的基本语法:介绍Java的关键字、标识符、数据类型、变量、运算符、语句和控制结构等基本语法知识。

2. Java的输入输出:学习如何使用Java提供的输入输出类库实现控制台输入和输出操作。

3. Java的数组:介绍如何声明、初始化和使用Java中的一维和二维数组。

三、面向对象编程1.面向对象思想:讲解面向对象编程的基本概念,如类、对象、封装、继承和多态等。

2. Java类和对象:学习如何定义Java类、创建对象实例、调用对象的属性和方法。

3. Java的封装和继承:介绍Java中的封装和继承的概念和实现方法,以及封装和继承在面向对象编程中的作用。

四、常用的Java类库和API1.字符串操作:学习Java字符串的基本操作,如字符串的拼接、截取、替换和比较等。

2.文件操作:了解Java文件的读写操作,包括文件的创建、删除、重命名和复制等。

3.集合框架:介绍Java的集合框架,如ArrayList、LinkedList、HashMap等常用的集合类,以及集合的增、删、改、查操作。

4.异常处理:学习如何使用Java的异常处理机制来处理程序运行过程中可能出现的错误和异常情况。

五、Java开发工具和技术1. Eclipse开发环境:了解如何使用Eclipse来编译、调试和运行Java程序。

泛型知识点总结

泛型知识点总结

泛型知识点总结泛型是Java语言中的一项重要特性,它允许我们在编写代码时使用一种通用的数据类型来代替具体的数据类型,从而提高代码的复用性、可读性和安全性。

本文将重点总结泛型在Java中的基本概念、用法和注意事项,帮助读者深入理解并合理运用泛型。

1.泛型的基本概念泛型是一种在编译时检查和验证数据类型的技术,它可以让我们在编写代码时使用一种通用的数据类型来代替具体的数据类型。

泛型的引入使得编写更加通用且类型安全的代码成为可能,从而提高了代码的可读性和可维护性。

泛型的基本概念主要涉及以下几个方面:1)泛型类(Generic Class):使用泛型定义的类,其成员变量、方法参数和返回值均可以使用泛型类型。

例如:`ArrayList<T>`、`Map<K, V>`等。

2)泛型接口(Generic Interface):使用泛型定义的接口,其方法参数和返回值均可以使用泛型类型。

例如:`Comparable<T>`、`List<E>`等。

3)泛型方法(Generic Method):在普通类或非泛型类中定义的使用泛型的方法。

例如:`public <T> T get(int index)`。

4)泛型通配符(Generic Wildcard):用于表示未知类型的通配符,包括`<? extends T>`、`<? super T>`等。

例如:`List<? extends Number>`。

2.泛型的用法泛型在Java中的用法主要有以下几种:1)定义泛型类泛型类是使用泛型定义的类,其中的成员变量、方法参数和返回值均可以使用泛型类型。

定义泛型类的语法如下:```javapublic class MyClass<T> {private T data;public T getData() {return data;}public void setData(T data) {this.data = data;}}```2)定义泛型接口泛型接口是使用泛型定义的接口,其中的方法参数和返回值均可以使用泛型类型。

黑马程序员javaweb教程:泛型的边界

黑马程序员javaweb教程:泛型的边界

泛型的边界
编译期状态:编译期状态,例如内部类!内部类就是只有编译器知道,而JVM不知道什么叫内部类!
1泛型的擦除
泛型其实是编译期状态,即JVM不知道什么是泛型,在JVM那里所有类都是正常的类。

没有类型变量。

一切的一切都是编译器干的好事儿!
其实List的get()方法返回值还是Object,只是编译器帮我们添加了强转的语句。

但这个强转一定不会出现问题。

因为本来add()方法添加元素已经限制过了,那么在get()时,一定不会出现强转的问题。

也就是说,在ArrayList类中持有的还是Object类型,而不是我们指定的类型。

当然,就算是JVM没有泛型,但编译器会帮我们完成这些问题,我们就可以当泛型真的存在。

2泛型边界限定的类型值的范围
通常我们看到的泛型类都没有边界限定,也就是说可以给泛型类的类型变量赋任意类型的值(当然基本类型是不可以的)。

java允许给类型变量指定边界,这样用户在给类型变量赋值时就必须在边界之内。

public class A<T extends Number> {}表示用户可以给T赋值为Number或Number的子类型。

例如:new A<Integer>()这是可以的,但new A<String>()是不可以的。

黑马程序员java培训就业班笔记集合体系总结

黑马程序员java培训就业班笔记集合体系总结

1、Collection:集合框架的由来:因为每一个容器对象的自身的数据结构不同,所以对它们进行单独的描述和对象封装,并非断的向上抽取共性内容,这样变形成了集合框架。

概念:集合就是一个容器、用来存储对象、长度可变。

理解:其实班级就是一个容器,班上的每一个学生都是单独封装了功能的对象,因为班级中的人数由于有人请假天天都再转变,所以长度是可变的,常见方式:1、增加:add();增加一个元素addAll();增加一部份元素。

2、删除:Remove();删除一个元素,会返回boolean类型,其实用到是equals方式,所以判断是不是有符合要求的元素。

若是删除成功会改变集合的长度。

下面同理。

removeAll();删除全数Clrea();清空容器总结:在这里要尤其注意,面试题中常常考到。

3、判断:Contains();是不是包括,也就说要所有的都包括在其中才算包括,不然不算包括。

isEmpty();集合是不是为空Size();集合长度。

4、取:retainAll();取交集。

理解总结:班级就是一个容器,班级中进来一名新生就是Add()添加一个元素,来了一堆同窗就是addAll,班上出去一个学生就是remove删除一个,出去一部份就是removeAll删除一部份,班级是不是有人,isEmpty,班上是不是包括张三contains,班上有多少人size。

班上是不是包括隔壁班的同窗retainAll.去交集。

集合利用细节:1、直接存储大体数据类型值也是可以的,因为后有自动装箱,会将大体数据类型转成对象,绝对不行。

Eg:(3)2、集合对象中存储的实际上是对象的元素的引用。

3、Add的参数是Object类型,可以接收所有的类型的对象,会出现向上转型,掏出元素时类型仍是Object不能利用具体对象的特有内容,想要利用特有内容向下转型。

Eg:Object obj="obj";想要掏出访问子类的特有方式,向下转型,String s=(String)();sop());|--List:有序列表(存取顺序是一致的)因为该子体系元素中有索引或角标,可以存储重复的元素。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Day18总结1、泛型类:在写容器之前想要容器中要存什么?所以要先写好泛型Eg:TreeSet<Person> ts=new TreeSet<Person>();有了泛型后强制转换就没有用Eg:public class Person implements Comparator<Person>{}对于下面覆盖的它的compare方法就不用强制转换了。

Public int compare(Person p){}这里就不用在做强制转换了。

实现代码:Public static void main(String[] args){Tool t=new Tool();t.setObject(new Cat());t.setObject(new Dog());这时编译会出现没问题,但是运行时会出现错误,因为发生了类型转换异常,dog不能转换成Cat。

Cat c=(Cat)t.getObject();Tool<Cat> t=new Tool<Cat>();t.setObject(new Cat());此时就不用强转了t.setObject(new Dog()):此时编译就失败,把运行时的异常转到编译时候。

}Class Cat{}Class Dog{}/*Class Tool{Private Object obj;Public void setObject(Object obj){This.obj=obj;}Public Object getObject(){Return obj;}}*/改进后Class Tool<T>{Private T t;Public void setObject(T t){This.t=t;}Public T getObject(){Return t;}}总结:这就是将泛型定义在类上,这个类称为泛型类,是一种替代Object类的一种技术,因为Object类有自动类型提升和转换,泛型已经替代它做了,编译时期更安全,省去了强转的麻烦。

什么时候使用泛型类?当类中要操作的引用数据类型不确定的时候,以前使用的是共性类型Object现在可以使用泛型来解决,比Object更为安全。

2、泛型方法:既然类中的方法操作类型不确定,其实可以将泛型定义在方法上。

实现代码:Tool<String> t=new Tool2<String>>();T.show(new Integer(5));编译失败,因为类型不一致。

Tool2<Integer> t1=new Tool2<Integer>();这样便可以操作Integer类型的对象了。

T.show();Class Tool2<T>{显示对象的打印结构,可是对象不确定,所以使用Object,而现在可以使用泛型解决。

<W>void show(W obj){Sop(obj);}当静态方法的时候,如果方法是静态的是无法访问类上定义的泛型的,如果该方法还需要泛型,必须将泛型定义在方法上,Static <Y> void staticMethod(Y t){}泛型定义在方法上时只能放在返回值的前面和修饰符的后面}什么时候使用泛型方法?当方法操作的引用数据类型不确定的时候就使用方法。

3、泛型接口:实现代码:Interface Inter<T>{void show(T t);}Class InterImpl implements Inter<String>{Public void show(String str){Sop(str);}}不明确的时候用上面这种,但是当我们明确了类型时候使用下面的这种情况Class InterImpl<W> implements Inter<w>{Public void show(W w){}}Public static void main(String[] args){New InterImpl().show("hehe");}4、泛型通配符:不带泛型也是可以的,因为新的可以兼容前面的,因为泛型擦除之后它还是Object注意区分T t代表某一种实现代码:Public static void main(String[] args){ArrayList<Student> al=new ArrayList<Student>();Al.add(new Student("lisi",21));Al.add(new Student("lisi2",22));Al.add(new Student("lisi3",23));ArrayList<Worker> al2=new ArrayList<Worker>();Al.add(new Student("lisiso",23));Al.add(new Student("lisiss",23));Al.add(new Student("lisisdsdf",23));ArrayList<String> al3=new ArrayList<String>();printCollection(a1);printCollection(a2);}Public static void printCollection(Collection<? Super Student> coll){Iterator<? Super Student> it=coll.iterator();While(it.hasNext()){Student stu=it.next();Student p=it.next();Sop(p.getName()+p.age());Object obj=it.next();Sop(obj.toString());}}对集合中的元素进行迭代的功能,因为打印集合中的元素类型是不确定的,无法明确,可以使用泛型中的通配符来完成,该通配符用?来标示,如果要对操作的类型进行限定,只操作一部分类型时,可以使用泛型的高级功能,泛型的限定。

?Extends E:可以接收E类型和E的子类型。

?SuperE:可以接收E了性或者E的父类型。

实现代码:Public static void printCollection(Collection<? Extedns Person> coll){Iterator<? extends Person> it = coll.iterator();while(it.hasNext()){// Student stu = it.next();Person p = it.next();System.out.println(p.getName()+"-----"+p.getAge());}}5、什么时候使用E extends?一般在存储具体引用类型时使用这种情况,因为存储E类型或者E类型的子类,这时可以保证类型是安全的。

实现代码:public static void main(String[] args) {Collection<Person> coll = new ArrayList<Person>();coll.add(new Person("abc1",21));coll.add(new Person("abc2",22));Collection<Student> coll2 = new ArrayList<Student>();coll2.add(new Student("lisi1",31));coll2.add(new Student("lisi2",32));coll2.add(new Student("lisi3",33));Collection<Worker> coll3 = new ArrayList<Worker>();coll3.add(new Worker("lisi11",31));coll3.add(new Worker("lisi22",32));coll.addAll(coll2);coll.addAll(coll3);Iterator<Person> it = coll.iterator();while(it.hasNext()){Person stu = it.next();System.out.println(stu.getName());}}6、泛型下限:下限什么时候用?从集合中取出对象进行操作时,可以使用下限。

比如:比较器。

无论集合中的元素对象的类型是什么,只要比较器的指定的类型可以接受这些对象完成比较,就可以了。

所以比较器的类型,可以是集合中当前元素的类型,也是可以该元素类型的父类型。

实现代码:public static void main(String[] args) {TreeSet<Student> ts = new TreeSet<Student>(new ComparatorName());ts.add(new Student("lisi1",21));ts.add(new Student("lisi2",28));ts.add(new Student("lisi9",23));ts.add(new Student("lisi7",27));TreeSet<Worker> ts2 = new TreeSet<Worker>(new ComparatorName());ts2.add(new Worker("lisi11",41));ts2.add(new Worker("lisi22",48));ts2.add(new Worker("lisi99",43));ts2.add(new Worker("lisi77",47));printCollection(ts);printCollection(ts2);// ArrayList<String> al = new ArrayList<String>();// ArrayList<Integer> al2 = new ArrayList<Integer>();// al.containsAll(al2);// "abc".equals(8);}/*** @param ts2*/public static void printCollection(TreeSet<? extends Person> ts2) {Iterator<? extends Person> it = ts2.iterator();while(it.hasNext()){Person p = it.next();System.out.println(p.getName()+":"+p.getAge());}}}class ComparatorName implements Comparator<Person>{@Overridepublic int compare(Person o1, Person o2) {//Person o1 = new Student("lisi1",21)int temp = o1.getName().compareTo(o2.getName());return temp==0?o1.getAge()-o2.getAge():temp;}}/*class ComparatorName implements Comparator<Student>{@Overridepublic int compare(Student o1, Student o2) {int temp = o1.getName().compareTo(o2.getName());return temp==0?o1.getAge()-o2.getAge():temp;}}class ComparatorName2 implements Comparator<Worker>{@Overridepublic int compare(Worker o1, Worker o2) {int temp = o1.getName().compareTo(o2.getName());return temp==0?o1.getAge()-o2.getAge():temp;}}*//*Collection<Student> coll = new ArrayList<Student>(); TreeSet<Person> ts = new TreeSet<Person>(coll);class TreeSet<E>{TreeSet(){}TreeSet(Collection<? extends E> coll){}下限什么时候用?从集合中取出对象进行操作时,可以使用下限。

相关文档
最新文档