黑马程序员——集合基础知识(泛型)

集合:泛型基础知识

泛型。(泛型就是类型参数化,默认的时object,虽然不用强制类型转换,这个就要你自己去写特性方法,比如compareto是string的特有方法吧,你可以写但是父类肯定调用不了)

itnex t对象都是obj要使用对象的特性功能必须强。编译的时候没问题,因为都不知道你会传什么对象,你橙子也可以当作apple来传,设计的时候并不知道!

泛型作用。1.用于解决安全问题。运行时期出现的问题classcastexception转移到编译时期。2.迭代器里面的itnext()不用强转了。

泛型的格式:通过尖口号来定义要操作的引用数据类型。你在集合创建的时候指定了element的类型,其实尖括号就是来接受类型的,当集合中要存储的类型作为参数传递进集合就行了,就像是参数类型传参数一般。

练习:来一个treeset,传了个字符串,可以打印长度也可以打印内容。如果我想要按长度来排列呢泛型避免了强转。。comparater<>,comparable<>也是,equals必须强转,Object不是泛型,指定类型了嘛。就不用强转啦

所以现在创建类的时候要写hashcode、equsals,compareto,compare方法,以便存储。



集合框架:泛型类

工人,学生。我们定义一个工具来创建/改写等操作。程序都是通过这样的方式提高扩展性的,obj作为形式参数,我也不知道操作什么类型的对象,但是功能确定,对方调用的时候指定操作的类型队象,但还是有安全问题。传说中的泛型类,不是一般的牛。让问题发生在编译时期。。。什么时候需要定义泛型类,当类中要操作的引用数据类型(基本数据类型不能不确定)不确定的时候,早期定义object来完成扩展,现在通过泛型来提高安全性,而且避免了强转。



集合框架:泛型方法。

以前我们做函数的时候要确定参数类型,现在用泛型就行!当你指定这个类是String的时候,这里面的方法全都可以操作String,你要操作其他对象,重新建一个改工具对象。泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经确定了

想要不同类操作方法,但是不想new对象,可以将泛型修饰在方法上。集合就是泛型类,只要集合已确定,里面方法要操作的对象类型都是确定的。

集合框架"静态方法类。这个T只有建立对象的时候才能明确,所以静态方法不可以访问类上定义的泛型,如果静态方法操作的引用数据类型不确定,泛型可以定义在函数上。放在返回值前面。



集合框架:泛型接口

我实现你的时候也不知道操作什么类型



集合框架:泛型限定!!(高级的应用)

比如现在有两个集合,ArrayList<String>和ArrayList<Integer>然后存完后都想去出来,有必要定义两个迭代器吗?我想打印任意类型的对象,不知道什么类型是吗?那就打个问号。接收ArrayList里面任何类型的元素,只能使用通用的方法,不能使用特有方法。。。这也是多态的特点。虽然学生继承了人,你定义的集合存的是人但是你的学生集合里面只能存学生,不能存学生之外的人。左右两边类型就不一致!!如果我搞个问号,集合什么类都能打印(?)但是我只想然这个方法在一个范围使用,只打印人和人的子类,?extends person!!!这就是泛型限定,两个限定,向上限定,向下限定。

通配符?泛型的限定。?extends E:可以接受e类型或者e子类类型。上限限定

? super E:可以接受e和其父类类型,下限限定treeset里面的compartor 哟,人家接口是?super e。你跟据实际情况改成Person~!既能接受person也能使学生或者工人,但是一定要调用共有方法。

集合框架

泛型:指定引用类型

限定:特定的类型及其子类或者父类

如何理解通配符:?通配符其实是自动匹配类型,当你左边是问号的时候,右边可以是任意类型来匹配通配符。

?extends Number就是说,比如 Integer,字符类型都可以。

? super E就是说,其他都不行,只能是Integer或者Number。

集合框架:泛型嵌套

public class GernericTest {
    public static void main(String[] args) {
        // TODO Auto-generated method stub

Map<String,Integer> hm=
new HashMap<String,Integer>();
hm.put("mia", 52);
hm.put("mfg", 53);
hm.put("mua", 51);
System.out.println(hm);
Set<Map.Entry<String, Integer>> mm=hm.entrySet();
for( Map.Entry<String, Integer> en:mm){
    System.out.println(en.getKey()+">>>"+en.getValue());
}}
}//打印结果
/*{mia=52, mua=51, mfg=53}
mia>>>52
mua>>>51
mfg>>>53*/

Map集合的取出方法中,Map.Entry里面用的是嵌套的泛型。

黑马程序员——集合基础知识(泛型)

时间: 2024-08-01 06:03:16

黑马程序员——集合基础知识(泛型)的相关文章

黑马程序员——集合基础知识(Collection)

集合基础知识 数组:长度固定,可存基本数据和对象. 集合:只能放对象,不固定.容器也有共性,不断抽取成一个体系,集合框架.参阅顶层创建底层.顶层是collection.collection里有两个常见的接口,List和Set.常见集合有Arraylist,linkedlist,vector,hashSet TreeSet.为什么会出现这么多的容器呢,因为每一个容器对数据的存储方式都有不一样,.这个存储方式称之为数据结构!!因为他们的特点不一样 list因为有脚标存储和删除的效率很低,Set的效率

黑马程序员——集合基础知识(Map)

Map概念 要同时存储两个元素,他们之间有映射关系,每个键不能重复,每个键只能映射到一个值. 存储键值对,并且键是唯一的. 1.添加. put()如果添加的键原来有值,后添加的值会覆盖前面的值,并返回之前的值. 2.删除 remove()按键删除. 3.判断 4.获取 get(object key) size() value()拿值value返回的是值的集合... HashTable 底层是哈西数据结构,不可以存入null键null值,线程同步. HashMap 底层是哈西表数据结构,允许使用n

黑马程序员——Java基础知识之多线程协同

多线程协同 线程间的通讯:对资源的操作动作不同,比如说两个卡车一个拉煤一个装煤,但是他们共享了一个资源. 怎么样把这个资源拿出来?怎样把车装满?这个资源当然是一个类,他里面的组成元素就是对象!!现在我们就要有操作对象的思想了,用对象把这车装满,现在一车装一个对象. 等待唤醒机制: 用的不是sleep是wait.flag标记,这是两人沟通的方式.其实每个标记就要做一次等待或者notify,判断wait,改值notify.线程池.notify唤醒里面的线程,按顺序唤醒.wait和notify必须用在

黑马程序员_JavaSE基础知识总结一:Java编程前奏

------ android培训.java培训.期待与您交流! ---------- 一.计算机概述 1.软硬件与语言 根据冯·诺依曼体系结构,计算机可以划分为五个部分:存储器.运算器.控制器.输入设备.输出设备.我们可以更加简单地把计算机划分为软硬件两个部分,硬件是指计算机系统中由电子,机械和光电元件等组成的各种物理装置,这些物理装置按系统结构的要求构成一个有机整体为计算机软件运行提供物质基础,常见如显示器.扫描仪.键盘等:软件是一系列按照特定顺序组织的计算机数据和指令的集合,又可分为系统软件

黑马程序员_java基础知识精华总结

本文总结了JAVA中的基础知识部分,具体包括:1.对象的初始化:2.2.继承时,对象的初始化过程:3.关于构造方法:4.有关public.private和protected:5.抽象类:6.final关键字:7.接口interface:8.多重继承:9.接口的嵌入:10.类的嵌入:11.异常类. 1.对象的初始化 (1)非静态对象的初始化在创建对象时,对象所在类的所有数据成员会首先进行初始化.基本类型:int型,初始化为0.如果为对象:这些对象会按顺序初始化.※在所有类成员初始化完成之后,才调用

黑马程序员_Java基础知识

java基础知识 1.Dos命令: dir:列出当前目录下所有的的文件及文件夹 md:创建目录 rd:删除目录 cd:进入指定mul cd\:返回到根目录 cd..:退到上级目录 del:删除文件 exit:退出dos命令行 *:通配符 help:帮助命令 2.path系统变量:系统中应用程序所在的路径 临时配置的环境变量的方式:用set命令完成 set:用于查看本机中所有环境变量的信息 set 变量名:查看具体的一个环境变量的值 set 变量名=:清空变量的值 set 变量名=具体值:赋值 在

黑马程序员-java基础知识+环境搭建和变量配置

一.dos命令 软件:是一系列按照特定顺序组织的计算机数据和指令的集合. 交互方式:图形化界面.命令行方式 dir  directory 显示文件和子目录 cd   change directory 改变当前的路径(进入指定目录) md   make directory 新建一个子目录(文件夹) rd   remove directory 删除一个子目录(文件夹) cd.. 返回上一文件夹 cd/  返回根目录(磁盘) del  delete 删除文件 (不走回收站)   del *.txt(删

黑马程序员_JAVA基础知识总结2

IDE > Java Enterprise Edition Java SE >1.在JavaEE开发中,经常要使用到JavaBean.很多环境要求按JavaBean方式进行操作. IntroSpector: PropertyDescript/Introspector/BeanUtils 注解> Java源文件 2.RetentionPolicy.CLASS > 内存中的字节码 @Target元注解用于表示自定义的注解可以用在哪些地方,通过ElementType的枚举元素来指定 泛型

黑马程序员_JAVA基础知识总结3

Java源文件的扩展名是.java,编译之后生成.class的文件.所有的类都有一个共同的继承祖先Object类 一个.java文件中只能有一个public类,一个public类只能定义在以它的类名命名的文件中 Implement关键字用来实现接口,类可以实现多个接口,继承使用extends 关键字 package(包)为了更好的组织java程序,包为java程序提供了一个命名空间,一个java类的完整路径由它的包和类名共同组成 Java类或者没有public关键字表示该类在它所在的包中可见,这