0
点赞
收藏
分享

微信扫一扫

idea的学习笔记

Resin_Wu 2022-04-13 阅读 68
java

JAVA 的多态简介
多态是同一个行为具有多个不同表现形式或形态的能力。

多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:
在这里插入图片描述

多态性是对象多种表现形式的体现。

现实中,比如我们按下 F1 键这个动作:

如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
如果当前在 Word 下弹出的就是 Word 帮助;
在 Windows 下弹出的就是 Windows 帮助和支持。
同一个事件发生在不同的对象上会产生不同的结果。

多态的优点README
消除类型之间的耦合关系
可替换性
可扩充性
接口性
灵活性
简化性
多态存在的三个必要条件
继承
重写
父类引用指向子类对象:Parent p = new Child();
在这里插入图片描述

函数接口简介
1.函数式接口是指仅有一个抽象方法的接口。
2.我们可以通过函数式接口的注解来进行检测,是否是函数式接口。
3.函数式接口作为参数或者返回值,实质上传入的是接口的实现类或者返回的是实现类。
同时在接口中使用default修饰的方法允许有方法体
在接口中使用default修饰的方法允许被实现类重写,使用实现类的实例化对象调用,执行的是实现类中重写的方法
在接口中使用default修饰的方法可以被子接口继承并且子接口可以重写继承的default修饰的方法
在接口中使用static修饰的方法允许有方法体,使用接口名点方法名调用,且不能被实现类重写
在接口中使用static修饰的方法不可以被子接口继承

Object类简介
Java Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法。
同时任何一个类在没有明确标识继承某一个父类的时候他就是Object的子类

父类示例代码

public class Person01 {
    private String nickname;
    private int age;
    private int gender;

    public Person01() {
    }

    public Person01(String nickname, int age, int gender) {
        this.nickname = nickname;
        this.age = age;
        this.gender = gender;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getGender() {
        return gender;
    }

    public void setGender(int gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Person01( nickname = " + this.nickname + ", age = " +this.age + ", gender = " + this.gender +" )";
    }
}

子类继承示例代码

public class Person01Test {
    @Test
    public void test01() {
        Person01 Person01 = new Person01();
        System.out.println(Person01);
    }

    @Test
    public void test02() {
        Person01 Person01 = new Person01("李昊哲", 40, 1);
        System.out.println(Person01);
    }

}

Arraylist 与 Linkedlist 的区别
ArrayList 的底层是顺序表(数组),LinkedList 底层是链表
ArrayList 数据存放在连续的内存空间上的,LinkedList 数据 不是存放在连续的内存空间上的
ArrayList 访问数据是随机且高效的,按照下表访问数据的时间复杂度是 O(1)LinkedList 随机插入删除数据是高效的,时间复杂度是 O(1);但是,其中 add 方法的插入数据操作的时间复杂度是 O(N);
对于 add(Index,elem):
ArrayList 取下标的过程是 O(1),插入删除数据是 O(N);
LinkedList 取下标的过程是 O(N),插入删除数据是 O(1);
ArrayList 在初始化的时候,需要 capacity 参数来指定最大容量,当 add 尾插时,元素个数小于 capacity 时,效率都高,时间复杂度为 O(1);当参数个数达到 capacity 时,就得进行扩容操作(就是申请一个大的内存空间,将原数据搬运过来,在释放原来的内存);
LinkedList 没有 capacity 参数这个说法,而是需要一个内存就申请一个内存,方便操作
ArrayList 比较害怕内存碎片,而 LinkedList 不需要担心这个问题

Arraylist示例代码

public class ArrayListTest {
    @Test
    public void test01() {
        List list = new ArrayList();
        byte a = 1;
        short b = 2;
        int c = 3;
        long d = 4L;
        double e = 5.0d;
        float f = 6.0f;
        char g = 'a';
        boolean h = false;
        Person person = new Person();
        list.add(a);
        list.add(b);
        list.add(c);
        list.add(d);
        list.add(e);
        list.add(f);
        list.add(g);
        list.add(h);
        list.add(person);
        list.add(a);
        System.out.println(list.size());
    }

Linkedlist示例代码

public class LinkedListTest {
    @Test
    public void test01() {
        List list = new LinkedList();
        byte a = 1;
        short b = 2;
        int c = 3;
        long d = 4L;
        double e = 5.0d;
        float f = 6.0f;
        char g = 'a';
        boolean h = false;
        Person person = new Person();
        list.add(a);
        list.add(b);
        list.add(c);
        list.add(d);
        list.add(e);
        list.add(f);
        list.add(g);
        list.add(h);
        list.add(person);
        list.add(a);
        System.out.println(list.size());
    }

list 与 set的区别
1.二者都是接口继承于collection接口
2.list是可以重复的,而set是不能重复的
3.List接口有三个实现类:LinkedList,ArrayList,Vector(线程是同步的,但是现阶段并不常用) ,Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet
4.List适合经常追加数据,插入,删除数据。但随机取数效率比较低。
5.Set适合经常地随机储存,插入,删除。但是在遍历时效率比较低。
List有顺序有重复没有排序,set无重复有排序,map的key也和set一样。

Arraylist 与迭代器代码示例

public void test01() {
        Set<String> set = new HashSet();
        for (int i = 0; i < 10; i++) {
            set.add("李昊哲" + i);
        }
        System.out.println(set);
        Iterator<String> it = set.iterator();
        while (it.hasNext()){
            String name = it.next();
            System.out.println(name);
        }

3.Map的功能方法
方法put(Object key, Object value)添加一个“值”(想要得东西)和与“值”相关联的“键”(key)(使用它来查找)。方法get(Object key)返回与给定“键”相关联的“值”。可以用containsKey()和containsValue()测试Map中是否包含某个“键”或“值”。标准的Java类库中包含了几种不同的Map:HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap。它们都有同样的基本接口Map,但是行为、效率、排序策略、保存对象的生命周期和判定“键”等价的策略等各不相同。
HashMap就是使用对象的hashCode()进行快速查询的。此方法能够显著提高性能。
Map : 维护“键值对”的关联性,使你可以通过“键”查找“值”
HashMap : Map基于散列表的实现。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量capacity和负载因子load factor,以调整容器的性能。
LinkedHashMap : 类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序。
TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。

举报

相关推荐

0 条评论