Java基础知识章节梳理(十七)

文字数:约2400字  阅读时间:40分钟

此文章为学习总结类型,文字很多且皆为基础知识

一.List集合数据结构

    List 接口下有很多个集合,它们存储元素所采用的结构方式是不同的,这样就导致了这些集合有它们各自的特点。

1.数据存储的常用结构

1.1堆栈结构(简称:栈)

    1.1.1 特点

    先进后出:存进去的元素,要将在它后面的元素依次取出后才能取出这个元素;栈的入口、出口都是栈的顶端位置

    1.1.2 应用场景

        Java中的方法运行时所用的内存空间结构就是堆栈结构;英文单词:Stack

1.2队列

    1.2.1 特点

    先进先出:存进去的元素,要将在它前面的元素依次取出后才能取出这个元素

    1.2.2 应用场景

        凡是需要排队的地方均可以使用

    例如,安检。排成一列,每个人依次检查,只有前面的人全部检查完毕后,才能排到当前的人进行检查;英语单词:Queue

堆与队列的示意图:

1.3数组

    1.3.1 特点

        查找元素快:通过索引,可以快速访问指定位置的元素

    增删慢:增删时会重新复制新建一个数组

    1.3.2 应用场景

    容器的查询次数多,修改次数少的时候可以使用;英语单词:ArrayList

1.4链表结构

    1.4.1 特点

    多个节点之间,通过地址进行连接,呈现链式链接(查询慢,增删快)

    1.4.2 应用场景

    凡是增删多,查询少的时候都可以使用;英语单词:LinkedList

数组与链表示意图:

2.LinkedList  集合

2.1介绍

    List 接口的链接列表实现,为对集合的开头和结尾的进行操作提供了一系列方法

2.2与链式结构相关的方法

    LinkedList():构造一个空列表。

    LinkedList(Collection<? extends E> c):构造一个包含指定 collection 中的元素的列表,

    这些元素按其 collection 的迭代器返回的顺序排列。

2.3 常用方法

    addFirst(E e):将指定元素插入此列表的开头。

    addLast(E e):将指定元素添加到此列表的结尾。

    getFirst():返回此列表的第一个元素。

    getLast():返回此列表的最后一个元素。

    offerFirst(E e):在此列表的开头插入指定的元素。

    offerLast(E e): 在此列表末尾插入指定的元素。

    peekFirst():获取但不移除此列表的第一个元素;如果此列表为空,则返回 null。

    peekLast():获取但不移除此列表的最后一个元素;如果此列表为空,则返回 null。

    pollFirst():获取并移除此列表的第一个元素;如果此列表为空,则返回 null。

    pollLast() :获取并移除此列表的最后一个元素;如果此列表为空,则返回 null。

    removeFirst():移除并返回此列表的第一个元素。

    removeLast():移除并返回此列表的最后一个元素。

    pop(): 从此列表所表示的堆栈处弹出一个元素。(此方法等效于 removeFirst())

    push(E e):将元素推入此列表所表示的堆栈(此方法等效于 addFirst(E) )

2.4 List集合的特点

    可以存储重复的元素

    有序(有索引)

    可以存放多个null值

二.Set集合数据结构

1. 概述

    一个不包含重复元素的Collection集合,并且最多只能包含一个NULL值

2. 常用的子类

2.1 HashSet

    2.1.1 构造方法

        HashSet(): 构造一个新的空 set

        HashSet(Collection<? extends E> c):构造一个包含指定 collection 中的元素的新 set。

    2.1.2 常用方法

      参考Collection中的方法

2.2 LinkedHashSet

    LinkedHashSet属于HashSet子类,可以保证存值的顺序与取值的顺序一致;

    使用方式与HashSet一致

    (上述两个集合的数据结构中都包含hash表结构)

3. Hash表

3.1 介绍

    散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。

    保证 HashSet 集合元素的唯一,其实就是根据对象的 hashCode 和 equals 方法来,决定的

哈希表与哈希值理解图:

3.2 Hash表结构

    在判断元素是否重复的时候,会先判断元素的hash值;如果hash值一致的情况下,再次判断equals方法

3.3 HashCode方法

    3.3.1 作用

    提升hash表性能

    3.3.2 hashCode 的常规协定是

        1)在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行     equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。

        2) 如果根据 equals(Object) 方法,两个对象是相等的,

  那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。

        3) 如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法时一定生成不同的整数结果。但是,程序员应该意识到,因为不相等的对象生成不同整数结果可以提高哈希表的性能。

3.4 生成规则

    1) 如果没有重写hashCode方法,那么将按照Object中的hashCode方法生成(通过内部地址生成)

    2) 如果重写了hashCode方法,那么将按照子类中的成员变量的hash值生成!!!

    3.4.1注意

    自定义数据类型,必须同时重写equals方法和hashCode方法,缺一不可!!!

4. HashSet与list判断元素是否重复的规则

4.1 hashSet的Contains方法

    比较的时候,直接通过参数对象的hash值比较一次,再通过equals方法确认一次即可;

4.2 List的Contains方法

    比较的时候,按集合中元素的顺序逐次与参数比较,直到比完或比对成功为止!效率低!仅仅依赖equals方法,不使用hashcode方法;

5. Set集合的特点

    1) 不可以存放重复的元素

    2) 无序;(无索引)(不能保证存值的顺序与取值的顺序一致)

    3) 最多只能存放一个null值

为更好理解set集合的唯一性,下图粗浅的解析了set中add方法的源码

 

三. Collection总结

1. List集合

    可以存储重复元素,有序的(元素存取顺序)

    1.1 ArrayList

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

        线程不安全,效率高

    1.2 LinkedList

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

        线程不安全,效率高

    2. Set集合

    不能存储重复元素,无序的(元素存取顺序)

    2.1 HashSet

            1) 元素唯一不能重复

            2) 底层结构是哈希表结构

            3) 元素的存与取的顺序不能保证一致

          如何保证元素的唯一的?

       重写hashCode() 与 equals()方法

     2.2 LinkedHashSet

            1) 元素唯一不能重复

            2) 底层结构是   哈希表结构 + 链表结构

            3) 元素的存与取的顺序一致

3. Collection成员方法

    add(Object e) :把给定的对象添加到当前集合中

    clear() :清空集合中所有的元素

    remove(Object o) :把给定的对象在当前集合中删除

    contains(Object o) :判断当前集合中是否包含给定的对象

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

    Iterator iterator() :迭代器,用来遍历集合中的元素的

    int size() :返回集合中元素的个数

    toArray() :把集合中的元素,存储到数组中

Collection集合结构图:

4. Iterator :  迭代器

    next(): 返回迭代的下一个元素

    hasNext(): 如果仍有元素可以迭代,则返回 true。

5. List与Set集合的区别?

    List:它是一个有序的集合(元素存与取的顺序相同),它可以存储重复的元素

    Set:它是一个无序的集合(元素存与取的顺序可能不同),它不能存储重复的元素

6. List集合中的特有方法

    add(int index, Object element) :将指定的元素,添加到该集合中的指定位置上

    get(int index):返回集合中指定位置的元素。

    remove(int index) :移除列表中指定位置的元素, 返回的是被移除的元素

    set(int index, Object element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素

7. 增强for

    简化数组和Collection集合的遍历

    格式:for(元素数据类型 变量 : 数组或者Collection集合) {使用变量即可,该变量就是元素}

    好处:简化遍历

8. 泛型

     用来约束数据的数据类型

    格式: <泛型名>

    泛型的好处:

        1) 提高了程序的安全性

        2) 将运行期遇到的问题转移到了编译期

        3) 省去了类型强转的麻烦

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值