• 第十六天笔记


    黑马程序员<a href="http://www.itheima.com" target="blank">java培训</a>

                        第十六天代码

    1.数据结构

    数据结构:用来存储数据的方式

    常见的数据结构:堆,栈,队列,数组,树

    2.数据结构之栈和队列

    栈:先进后出

    队列:先进先出

    3.数据结构之数组和链表

    数组:在内存中拥有一片连续的区域。内存地址是连续的。

           特点:查询速度快,添加或删除操作性能比较低

      链表:它在内存中不是连续的区域,它是通过一个一个的节点连接起来,在节点中存储数据和下一个节点的地址,形成一个链。

            特点:查询速度慢,添加或删除性能高

    注意:数组长度能不能改变(可变数组)

    1. 先创建一个新数组,它比old数组长度长
    2. 将old数组中的元素copy到新数组中
    3. 将原来指向old的引用重新指向新数组
    4. Arraylist:

    4.List的三个子类特点

    ArrayList底层就是使用数组实现。

    特点:查询性能高,插入或删除性能低

    1. LinkedList

    LinkedList底层是用链表实现。

    特点:查询性能低,插入和删除方便

    1. Vector

    Vector底层也是使用数组实现

    在实际开发中现在已经不适合Vector

    1. ArrayList和Vector的区别

    ArrayList是异步的-------安全性差,性能高

    Vector是同步的-------安全性高,性能低

    5.ArrayList存储字符串并遍历

      1.ArrayList有三种遍历方式,传统的for遍历,iterator遍历,listIterator遍历

      代码演示:


    //ArrayList存储字符串并遍历
    public class ArrayListDemo1 {

    public static void main(String[] args) {
    // 1.创建一个ArrayList集合
    ArrayList list = new ArrayList();
    // 2.向集合中添加元素 String
    list.add("tom");
    list.add("fox");
    list.add("james");
    // 3.遍历list集合
    // 第一种
    for (int i = 0; i < list.size(); i++) {
    String s = (String) list.get(i); //强制转换
    System.out.println(s);
    }

    // 第二种
    for (Iterator it = list.iterator(); it.hasNext();) {
    String s = (String) it.next(); //强制转换
    System.out.println(s);
    }

    // 第三种
    for (ListIterator lit = list.listIterator(); lit.hasNext();) {
    String s = (String) lit.next();//强制转换
    System.out.println(s);
    }

    6.Arraylist存储自定义对象并遍历

    //向ArrayList中存储三个Student对象,并遍历
    public class ArrayListDemo2 {
    
        public static void main(String[] args) {
            // 1.创建ArrayList
            ArrayList list = new ArrayList();
            // 2.向集合中添加元素
            list.add(new Student(1, "tom", "男"));
            list.add(new Student(2, "fox", "男"));
            list.add(new Student(3, "kobe", "男"));
            //3.遍历集合
            //在开发中我们一般使用比较多的方式是1.for+size+get   2.Iterator
            
            //3.1使用for+size+get
            
            // for (int i = 0; i < list.size(); i++) {
            // Student s=(Student)list.get(i); //集合中是什么类型,我们在使用时就转换成什么类型
            // System.out.println(s.getId()+"  "+s.getName());
            // }
            
            //3.2迭代器
            for(Iterator it=list.iterator();it.hasNext();){
                Student s=(Student)it.next();
                System.out.println(s);
            }
        }
    }

    7.Vector的特有功能

    Vector它与ArrayList使用方式一样,现在开发中应用比较少了

    对与Vector它有一些特殊的方法:

    8.Linkedlist的特有功能

    LinkedList底层实现是链表。 在API中我们知道 LinkedList可以直接对头元素或尾元素进行 get,remove,insert操作

    //LinkedList介绍
    public class LinkedListDemo1 {
    
        public static void main(String[] args) {
            // 1.创建一个LinkedList
            LinkedList ll = new LinkedList();
            // 2.向集合中添加元素
            ll.add("a");
            ll.add("b");
            ll.add("c");
            ll.add("d");
    
            // 3.遍历
            // for(Iterator it=ll.iterator();it.hasNext();){
            // String s=(String) it.next();
            // System.out.println(s);
            // }
            //
            // for(int i=0;i<ll.size();i++){
            // System.out.println(ll.get(i));
            // }
    
            // System.out.println("获取头元素:"+ll.getFirst());
            // System.out.println("获取尾元素:"+ll.getLast());
    
            // ll.removeFirst(); //将头元素remove
            // System.out.println(ll);
    
            // ll.removeLast(); //将尾元素remove
            // System.out.println(ll);
            
    //        ll.addFirst("first"); //添加头元素
    //        System.out.println(ll);
            
            ll.addLast("end");
            ll.add("e");
            System.out.println(ll);
    
        }
    }
    /**
     * LinkedList底层实现是链表。 在API中我们知道 LinkedList可以直接对头元素或尾元素进行 get,remove,insert操作.
     * 
     * 对头尾元素进行get操作. getFirst getLast 对头尾元素进行remove操作 removeFirst removeLast
     * 对头尾元素进行insert操作 addFirst addLast
     * 
     */

    9.泛型概述和基本使用

    用来约束集合数据的类型,是jdk1.5以后提供的一个新功能。

    优点:

    不需要强制转换

    将原来在运行阶段产生的问题,拿到编译阶段来解决问题

    在设计阶段更加方便

     

    12.ArrayList存储字符串并遍历泛型

    如果使用了泛型,get方法可以直接得到对应的类型。

    如果使用泛型,使用Iterator时也需要指定泛型,这样在使用next时不需要强转

     

    13.泛型类的概述及使用

     在类上声明的泛型

    格式    class 类名<T>

    注意:在类上声明的泛型,可以在类的成员上使用

    简单说,就是可以在类的成员方法,成员变量上使用.

    静态成员上不能使用.

    14.泛型方法的概述及使用

        在方法上声明泛型,格式

             修饰符 <类型> 返回值类型  方法名(参数。。。){

    注意:泛型要在返回值类型前。

    问题:在方法上声明的泛型,它可以在哪些位置使用?

    1. 在方法外可不可以使用?

    不可以使用,作用域问题

    1. 只能在方法上使用,那么在方法哪些位置上可以使用?

    a)        参数上可以使用

    b)        在返回值类型上也可以使用

    c)         在方法体内部可以使用。

    注意:一般情况下,都是方法的返回值类型或方法的参数使用。

    15.泛型高级之通配符

    三种通配符:

    对”?”通配符它有三种用法:

             第一种:  List<?> 匹配任意类型

             第二种:  ? extends E  通配的是E类型或E的子类类型

             第三种:  ? super E 通配E类型或E的父类型。

     

    16.增强for循环

    作用:对容器进行遍历

    格式:for(类型 引用:容器)

    优点:比传统的for循环简单方便

    缺点:不能对集合的数据进行精确的控制。

    问题:什么样的容易可以被增强for(foreach)来操作

           只有实现了Iterable接口的容器才可以被foreach操作

    问题:增强for对集合进行遍历时,它的原理是什么?

          它的底层就是你使用Iterable

    思考题:使用增强for可不可以遍历

    17.静态导入

    Jdk1.5提供的一个新功能。

    格式:import .static 包名.类名

    作用:在使用静态成员的时候,不用类名.方法

    缺点:

    不利于阅读代码

    方法名相同时可能引起冲出

    18.可变参数的概述和使用

    格式:方法名(类型…名称)

    使用时可以传递参数,也可以不传递参数。

    注意事项:可变参数的后面不可以有其他参数。一个方法里面有且仅有一个可变参数。

        优点:对程序进行优化,简化代码。

    Array工具类中的asList的使用

    使用的注意事项:

    1如果操作的是基本数据类型的数组,那么它是将数组作为集合的元素。

    2.如果list集合是由数组转换过来的,不可以使用集合中改变长度的方法。

  • 相关阅读:
    DirectX标准规定 DirectX和OpenGL的不同
    Android 抽屉效果的导航菜单实现
    Servlet基础(三) Servlet的多线程同步问题
    Java微服务之Spring Boot on Docker
    Spring Cloud 微服务架构学习笔记与示例
    从你的全世界路过—一群程序员的稻城亚丁游记
    从一个国内普通开发者的视角谈谈Sitecore
    吴军《硅谷来信》思维导图笔记
    .NET Core微服务之基于Jenkins+Docker实现持续部署(Part 1)
    2018OKR年中回顾
  • 原文地址:https://www.cnblogs.com/liman/p/4430701.html
Copyright © 2020-2023  润新知