黑马程序员----List集合中的另外两个小弟,Vector LinkedList(实现结构,本身特点,自己的独有方法). 泛型技术:

  1. ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

1.      第十六天的回顾,集合是容器,专门存储对象,长度可变。顶层的接口Collection,下面所有的小弟,都具备顶层接口的方法。add size contains iterator。存储add方法,获取用的就是迭代器。List派系,重复,下标,有序。ArrayList:长度可变数组,线程不安全,每次增长原基础50%,查询快,增删慢

 

2.      第十七天的学习内容:List集合中的另外两个小弟,Vector  LinkedList(实现结构,本身特点,自己的独有方法). 泛型技术:由来,实际的作用,好处,自定义泛型

 

3.      ArrayList去掉重复对象,自定义对象

   存储的是字符串,功能可以实现

   存储的是Person,功能失败

   原因在contains方法上,该方法根据什么,判断对象是否存在集合中。

   判断因素是对象中的equals方法

   String类,重写equals,建立了字符串自己的比较方法

   Person类,重写equals方法,建立Person对象自己的比较方式,比较的是类中的姓名和年龄 name age.

   contains方法实现的时候,自动调用集合中存储的对象的equals方法,如果equals方法返回真,判断集合中包含这个对象。否则不包含

 

4.      Vector类

  开始版本JDK1.0 , 升级到JDK1.2的时候,才出现了集合框架的概念。类Vector在JDK1.2版本后,改为实现List接口。类名不该呢 VectorList,版本的兼容性。

  Vector类底层实现,也是可变数组,增长率100%,线程安全,运行速度慢

  从JDK1.2版本开始,Vector被ArrayList取代

 

5.      LinkedList类

  特点和List接口,一致,重复,有序,下标

  LinkedList底层实现原理:链表结构,查询慢,增删快,线程不安全,运行速度快

  存储和取出,实现代码,和ArrayList完全一致

 

6.      LinkedList特有方法

l  在列表的开头或者结尾添加元素 addFirst(Object o )  addLast(Object o)

l  获取列表的开头或者结尾Object getFirst()  Object getLast()

l  移除列表的开头或者结尾Object removeFirst()  Object removeLast()

l  以上的获取和移除,列表中是空的,出现没有元素被取出异常

    在LinkedList中,1.6版本开始,添加了几个新的方法,来操作集合

l  offerFirst()  offerLast() 替换的了addFirst()addLast()

l  Object peekFirst()  ObjectpeekLast() 替换了 getFirst() getLast().如果集合中是空的,获取后返回null不会出现异常

l  Object pollFirst()  Object pollLast()替换了 removeFirst() removeLast().如果集是空的返回null,不会出现异常

 

7.      数据的存储结构队列和堆栈

   堆栈:内存中的数据,先进去的,后出来

   队列:内存中的数据,先进去的,先出来

   特点:符合LinkedList类的特点,存储对象的时候,开头结尾,获取对象的时候,可以在开头和结尾获取。

   使用LinkedList,模拟数据的先进后出,先进先出

 

8.      模拟堆栈和队列

  用户方,不直接面对LinkedList,我们程序人员,把LinkedList中的功能实现,交给用户的是别的功能。

  定义类,实现先进先出,先进后出,提供给用户

 

9.      泛型技术的由来

 泛型是JDK1.5出现的安全机制

 安全隐患出现,数据类型的问题,导致程序发生类型转换异常

 1.5开发出了,泛型技术,解决程序中的安全问题

 

10.  泛型如何解决安全问题

  泛型的出现,可以强制集合,存储指定的数据类型,其他类型不允许存储

  如果指定集合只能存储String,其他类型是存不进来的

  书写格式:通用格式

     集合类<数据类型>  变量 = new 集合类<数据类型>();

  强制集合存储指定的数据类型,如果数据类型不符号要求,编译失败

  写泛型的时候,前后的类型一致

  JDK7新特性,泛型前后自动匹配,后面的可以不写 , 空菱形语法

 

11.  泛型的好处

  保证安全:将问题,由运行时期,提前到了编译时期

  简化书写,代码量减少

  使用泛型,避免了类型的强制转换

 

  ArrayList<E> 源代码,E就是一个变量而已,在这个类的方法中,写了E,同一个变量。

  传递什么值,就是什么值

 ArrayList<String>  array =new ArrayList<String>();

  源代码中的E,就全部变成了,String

 

  迭代器接口  Iterator<E>  方法next()返回值,也是E,如果迭代器中指定泛型是String类型,Iterator<String>next方法返回值,跟着变成了String类型

 

  以后,如果你需要用一个类,发现类的右边写了一个尖括号<>写泛型了,指定具体的数据类型。存储基本数据类型,泛型写包装类

 

12.  泛型案例

   集合存储Person,带泛型,迭代器的获取,带泛型,强制转换的避免

 

13.  自定义泛型

  可以保证程序的安全性<>自定义泛型

  写一个类(工厂类),创建对象,并返回对象,两种写法,有泛型和无泛型

  体现出安全机制

 

14.  定义泛型类,泛型方法,泛型接口

  泛型类:将泛型,定义在类上,如果类中的任何位置出现了个泛型,和类上的泛型是相同的。工厂类案例  E==定义了一个变量

  泛型方法:跟随类的泛型走的。定义泛型不跟着类的走的.在方法的声明上,在返回值类型之前,定义泛型,这个泛型属于方法自己,不属于类上的泛型

  静态泛型方法:不可以和类上的泛型相同,如果相同,出现静态不能访问非静态,自定义一个泛型,这个泛型只属于这个静态方法。静态方法的泛型,写在返回值类型前

 

 泛型接口:接口上定义泛型,实现类实现接口不指定泛型,实现类实现接口的同时,就实现了泛型

 ArrayList实现List接口

 interfaceList<E>{}  class ArrayList<E>implements List{}

 不需要你亲自写泛型类,方法,接口,但是别人写的,你要能看懂就O了

 

15.  Java泛型,假泛型

  假泛型:写程序的时候,明确了泛型,编译的时候,数据类型不对,编译失败,但是编译后的class文件,字节码文件,发现根本没有泛型

  C++,编译后obj,带泛型

 

16.  泛型的通配符

 文件系统中,通配符 * 匹配任意的文件名,或者是后缀名 del *.*  del *.java 

 定义方法,做集合的遍历,但是要求的是遍历任意的一个Collection下的子类集合

 泛型中,有一个通配符号?  问号,匹配所有的泛型类型,好处方便遍历集合,弊端在于不能进行强转

 

17.  泛型的限定

  抽象类中有一个案例,员工和经理,最终形成一个父类公司类

  两个集合,一个存储员工对象,一个存储经理对象,一个方法遍历2个集合,遍历过程中,调用工作方法 job

  泛型的限定问题,写泛型的时候,只需要确定子类,或者父类就可以使用泛型的限定,案例员工和经理,实现了限定操作,提高了安全性,避免了数据类型的强制转换

  泛型上限限定 ?extends E  传递E类型 和E的子类

  泛型下限限定 ?super E    传递E类型 和E的父类

 

18.  增强for循环

   JDK1.5新特性:是一个简化书写的循环格式,前提是泛型技术。接口Iterable,凡是实现这个接口的类,都可以使用增强for循环进行遍历,包括数组。

  有好处,就有弊端

  好处:简化书写,方便遍历

  弊端:想操作数组或者是集合中的元素是不行的,只能看不能摸

  格式:

     for(数据类型 变量 : 数组或者集合){

 

     }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值