Java基础--第十七天

泛型

         一、常见数据结构:栈,队列,链表,数组,树,图,堆……

        

                   栈:先进后出--压栈、弹栈

                   队列:先进先出

                   数组:存储多个同一种元素,元素有编号【数组插入/删除数据】

                            查询快,增删慢

                   链表:把一些结点通过链子链接起来的数据结构。

                            结点:由地址(指针)域和数值域组成

                            增删快,查询慢

         二、List三个子类特点

                   线程安全(同步)【效率降低】:

                   ArrayList类:底层数据结构是数组,查询快,增删慢,不安全

                   Vector:底层数据结构是数组,查询快,增删慢

                            线程安全,效率低

                   LinkedList:底层数据结构是链表,查询慢,增删快;

                            线程不安全,效率高

         三、Vector特有功能

                   public void addElement(Object obj)---add

                   public Object elementAt(int index)---get

                   public Enumeration elements()----Iterator[hasNext   next]

                   public int size()

         四、LinkedList特有功能

           添加

                   void addFirst(E e)

                   void addLast(E e)

           获取

                   Object getFirst()

                   Object getLast()

           删除

                   Object removeFirst()

                   Object removeLast()

【模拟题】通过LinkedList模拟栈结构---包装

         要模拟的对象特点

         五、泛型

                   任意的类型,是一种把明确数据类型的工作放在了创建对象或者调用方法时候进行的特殊类型。

                   模仿数组解决

                   泛型特点:

                            A:解决黄色警告线问题;

                            B:把运行期间的类型转换异常提前到编译期间;

                            C:优化程序设计

                   用于限定存储数据类型一致问题,数据类型后面

         六、增强for循环

                   格式

                   作用

                            增强for和迭代器一般只选一种,增强for是来替代迭代器的

                   注意:增强for是用来替代迭代器的,不能用集合对象对集合对象进行修改

                   泛型类:

                            把泛型定义在类上。

                   泛型方法:

                            泛型定义在方法上

                   泛型接口

                            实例:String泛型中追加int型数据

         

Day16总结

1:常见的数据结构

      (1)提升等级:数据结构+算法+UML+设计模式

      (2)栈,队列,数组,链表

           栈:先进后出

           队列:先进先出

           数组:查询快,增删慢

           链表:查询慢,增删快

2:List的三个儿子

      (1)List的三个儿子特点:

           List

                 |--ArrayList

                      底层数据结构是数组,查询快,增删慢

                      线程不安全,效率高

                 |--Vector

                      底层数据结构是数组,查询快,增删慢

                      线程安全,效率低

                 |--LinkedList

                      底层数据结构是链表,查询慢,增删快

                      线程不安全,效率高

      (2)根据需求使用具体对象:

           是否要安全:

                 是:Vector

                 否:ArrayList,LinkedList

                      查询多:ArrayList

                      增删多:LinkedList

           不清楚时,用ArrayList。

(3)ArrayList

           重写equqls三个步骤

                 1. 判断是否为同一个对象

                 2. 判断是否为该类的对象

                 3. 向下转型,然后根据需求比较成员变量

      (4)Vector     C++中依旧在用  STL

           有自己的特殊功能。

           但是不用,被新功能给替代了。

      (5)LinkedList(存储字符串和自定义对象)

           有自己的特殊功能。可以很方便的操作头和尾。

      (6)案例:(今天作业之一)

           A:ArrayList存储字符串并去除重复值

           B:ArrayList存储自定义对象并去除重复值

                 需求:我们认为同姓名和同年龄的人即为同一个人。

           C:用LinkedList模拟栈数据结构

3:泛型

      (1)泛型是一种把明确类型的工作放在了创建对象或者调用方法时候才去明确的特殊的类型。

      (2)格式:

           <数据类型>

      (3)好处:

           A:解决了黄色警告线问题

           B:把运行期间的转换异常给提前到了编译期间

           C:优化了程序设计,不需要做强制类型转换了

      (4)泛型的前世今生

           A:泛型类

           B:泛型方法

           C:泛型接口

      (5)泛型的使用:

           看API中的类或者接口,其后是否跟有<>,如果有,就是泛型的应用。

           一般在集合中用。

4:增强for循环

      (1)格式:

           for(数组或者Collection集合的元素类型 变量 : 数组或者Collection集合的对象)

           {

                 直接使用变量即可。

           }

      (2)好处:

           方便了数组和Collection集合的遍历。

      (3)注意(注意):

           A:增强for是用来替代迭代器的。

           B:不要在用增强for遍历集合的时候,用集合对集合本身进行修改。

(4)遍历集合三种方式

           迭代器

           普通for+get

           增强for(工作时候用)

原文地址:https://www.cnblogs.com/zhidianhcuan/p/4385496.html