2022-07-14 day 20

一、泛型方法

1、声明语法

传递方法的泛型参数:调用的时候传递泛型参数

变量.< 实际的泛型类型>方法名();

方法中声明的泛型只能在当前方法中使用

类声明的泛型在整个类中都能用

每次调用方法都可以确定不一样的类型

二、声明受限制的泛型

受限泛型类

class 类名< T extends 类型>

{

}

受限泛型方法

public < T extends 类型> 返回值 方法名称(){

}

传递泛型参数的时候T必须是父类型或者是它的子类型

三、泛型通配符

在声明范型类的变量时可以使用通配符,在创建对象中不可以使用通配符。

1、声明的时候直接写?

2、使用通配符限制上界:<? extends 上界类型>

示例: 右边的<>中的类型必须是Number或者Number的子类型

List<? extends Number> list=new ArrayList();

List<? extends Object> list=new ArrayList();

不可以调用传递范型参数的方法。

调用带泛型返回值的方法,返回值按照上界类型对待

在声明变量的时候使用,可以对该变量接收的对象的类型中的泛型信息做一些限制,但是又有一定灵活性

3、<? super 下界类型>

右边的<>中的类型必须是Number或者Number的父类型或者实现的接口类型

可以调用传递范型参数的方法,参数按照下界类型来对待了

调用带泛型返回值的方法,返回值全部按照Object对待了

四、泛型擦除

1、概念 Java的泛型是伪泛型,这是因为Java在编译期间,类中声明的、接口中声明的、方法中声明的所

有的泛型信息都会被擦掉,在这些类生成的字节码文件中的正文中是不包含泛型信息,这个过程成为泛

型擦除,泛型擦除之后,原来在源文件中使用泛型类型的地方在字节码文件中会替换为Object,如果声

明的时候声明的受限制的泛型,那么字节码文件中会替换为限制类型。

2、泛型擦除的时间点:发生在编译期间

编译器首先检查类型安全—————————》进行编译擦除泛型信息———————-》字节码文件中

就没有泛型信息(Object)

3、泛型擦除的一些问题

1)因为存在泛型擦除,所以反射机制可以破坏泛型的特性。,比如创建Person类型对象的时候确定了

Person类的T为String.,使用反射机制调用setPersonId方法缺可以放置其它类型,因为字节码文件中的

setPersonId方法的参数为Object类型

2)因为存在泛型擦除,所以方法重写的时候会有冲突,但是JAVA语言已经想办法解决这个冲突,就是

使用桥方会在子类或者实现类的字节码文件中生成一个和父类同名同参的桥方法,在此桥方法中,调用

了我们自己在源文件中重写的方法

3)传递泛型参数的时候不能传递八中基本数据类型

4)Instanceof运算符后面的类型不能传递泛型参数,只能写原始类型、

五、泛型使用注意事项

1、不能将静态属性声明为泛型类型

2、不能在静态方法中使用类声明的泛型类型

3、不能创建泛型数组:new T[10],写法错误

4、使用Instanceof运算符比较的时候,类型不能包含泛型信息,因为有泛型擦除

5、传递泛型参数的时候不能使用8种基本数据类型

六、层次结构

1、Collection:以单个元素为单位进行存放

List:有序集合,每个元素都有一个和存入顺序吻合的索引编号,并且,我们可以依靠位置编号对

集合中的元素进行操作

ArrayList:实现类

LinkedList

Vector

Set:无序集合,每个元素没有位置编号,程序员也不能用位置编号对集合中的元素进行操作,不

能存入重复值

HashSet

LinkedHashSet

TreeSet

2、Map:以键值对为单位进行存放HashMap

LinkedHashMap

TreeMap

Hashtable

七、Collection

存放若干个独立元素

增加操作

•boolean add(Object element) :增加一个元素

•boolean addAll(Collection collection) :将集合中的所有元素进行增加

移除操作

•boolean remove(Object element) :移除一个元素,依靠equals方法进行 比对。注意。你的元素类型

有没有重写equals方法,如果有重写,那就调用重写过的equals,没有重写,调用Object类的equals

void clear() :清空所有元素

•void removeAll(Collection collection):将在集合中的元素移除, 依靠equals方法进行 比对

•void retainAll(Collection collection) :将不在集合中的元素移除, 依靠equals方法进行 比对

查询操作:

•int size() :集合实际元素的个数

•boolean isEmpty() :判断集合是否为空

•boolean contains(Object element) :判断集合中有没有包含一个元素

•boolean containsAll(Collection collection) :判断集合中有没有包含另一个集合中的元素

•Iterator iterator() :得到迭代器

八、List

数据结构:

逻辑存储结构

    线性的:每个元素有0或者1个前驱元素,有0个或者1个后继元素

    树结构:每个元素有一个或0个前驱元素,有0个多个后继元素

    图结构:每个元素有多个或0个前驱元素,有0个多个后继元素

物理存储结构

    线性存储:元素在内存中是连续存放的

    链式存储:元素在内存中不是连续存放的

List: 有序集合,可以放入重复(equals进行判断)元素,会按照存入的顺序给每个元素编号,遍历的

时候也可以依靠编号进行遍历

示例:

1、ArrayList

常用API

    构造方法

底层:底层是一个Object类型的数组,初始的默认长度10,也可以指定长度,初始长度如果满了,

底层进行自动扩容,扩容为原来的1.5倍oldCapacity + (oldCapacity >> 1)。10—->15—->22,如

果对集合中的元素个数可以预估,那么建议预先指定一个合适的初始容量,可以减少扩容的次数


List l =new ArrayList();

线程不安全,性能高。

优点:查找效率高,向末尾添加、删除元素也可以

缺点:增加 、删除牵扯到数组的扩容和移动,效率低

2、LinkedList:

常用API:

构造方法

LinkedList():无参数

LinkedList(Collection c):带集合类型的参数

其他方法(实现类独有的方法)

    addFirst:给链表头添加元素

    addLast:给链表末尾添加元素

底层是一个链表(双向)结构,添加的元素和前后元素的地址信息会封装成一个Node类型的对

象,放到集合中,不是线性存储,内存中是链式存储,不连续的空间。

优点:增加、删除效率高

缺点:查找效率低

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • 14.1 泛型与集合 JDK1.5增加了泛型支持。增加泛型后的集合,可以让代码更加简洁,程序更加健壮。Ja...
    王毅巽阅读 520评论 0 0
  • 九种基本数据类型的大小,以及他们的封装类。(1)九种基本数据类型和封装类 (2)自动装箱和自动拆箱 什么是自动装箱...
    关玮琳linSir阅读 1,877评论 0 47
  • 简介 说起各种高级语言,不得不谈泛型,当我们在使用java集合的时候,会发现集合有个缺点:把一个对象“丢进”集合之...
    双木ll之林阅读 253评论 0 1
  • 在经过一次没有准备的面试后,发现自己虽然写了两年的android代码,基础知识却忘的差不多了。这是程序员的大忌,没...
    猿来如痴阅读 2,829评论 3 10
  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,253评论 0 16