栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java基础-集合

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java基础-集合

为什么要使用集合?

当存储数据的时候,当数据多的时候变量就不方便了, 不是一个明智的选择,那么数组呢,数组也不是个好的选择,

数组在创建的时候需要指定长度,在使用的时候长度不变, 所有我们要寻求一个拥有可变长度的容器来存储这些数据。

还好Java提供了各种各样的容器,每个容器的长度都是可变的,我们只管往里面存,空间如果不够,它自己会调。

所以有再多的数据我们也不怕,也不用看着下标去存,当看到提供的对应方法的时候就知道是什么操作了.

比如:add,remove,size,isEmpty.....

为什么要使用集合?

答:因为方便和高效

---------------------------------------------------------------------------------------------------------------------------------

集合框架中两大体系 Collection和 Map

Collection 集合体系

 

Map 键值对 集合体系

 

---------------------------------------------------------------------------------------------------------------------------------

Collection做为集合框架的顶层设计,它里面抽象出了17个公共方法;

这些方法分三类:1.修改操作; 2.查询操作;  3.批量操作;

add(E e)

向集合中添加单个数据,成功返回true,失败返回false

addAll(Collection c)

向集合中添加批量数据,成功返回true,失败返回false

所添加的数据类型跟定义的数据类型保持一致(常见的是一个对象,或者子对象,除此以外其他类型都无法存入)

    批量数据一般来自另一个集合,平时开发的时候用的比较少

---------------------------------------------------------------------------------------------------------------------------------

集合删除数据的方法有几种?

一共有四种:

1.删除单个数据remove方法

 2.删除批量数据removeAll方法

3.删除符合条件的数据 removeIf方法(jdk1.8)

4.删除所有数据clear方法直接清空集合

remove:数据是通过迭代器来删除的,它根据要删除的数据是否为null,分为两种情况,Remove方法每调用一次,只删除一个匹配项;当要删除的数据不为null的时候,匹配删除对应的项;

 

 

 

 ---------------------------------------------------------------------------------------------------------------------------------

removeAll:删除指定数组的数据

 

 retainAll: 指定要保留的数据的集合,跟removeAll是相反的原理

 

removeIf: 遍历集合,依次检查迭代器的返回数据,以查看它是否满足规则,满足规则用remove方法删除;

clear:遍历集合依次调用迭代器的remove方法,删除集合中的每一项数据;

---------------------------------------------------------------------------------------------------------------------------------

ArrayList:

array数组的意思,list列表的意思;数组列表

存入的顺序和取出的顺序一致:

 

优点:查询快,只要知道数据的下标查询速度非常快,arraylist是所有容器中查询速度最快的一个;

缺点:增删慢,因为数组满了后要扩容,扩容要新创建一个是原来1.5倍的新数组,然后把之前的元素copy到新数组中来;这样一来数据越多越慢;

大小Size是元素的个数;容量(capacity)就是数组的长度;

 

三个构造方法:

 

无惨构造方法的初始容量是10;第二个构造方法可以指定容量;第三个可以将另一个集合数组中的元素插入到ArrayList集合中数组的初始容量就是集合的大小;

常用方法:

  ArrayList不仅是list下的一员,又做为collection旗下的一员,所以不但拥有collection里面的所有方法,还拥有list里面的所有的方法;

 

ArrayList常用的方法有10个

 

---------------------------------------------------------------------------------------------------------------------------------

linkedList:

linked链式的意思,list列表;链式列表,基于链表实现的,而且是双向的,所以又称“双向链表”

 

前后没有节点的时候

 

前后有节点的,可以从尾部和头部添加节点

  1. 有序,元素存入和去除的顺序一致
  2. 可重复,里面可以存储重复的元素
  3. 可为null,它里面可以存储null元素

 

优点:增删快,增加的时候只需要记住前后节点就可以了

缺点:查询慢,每次查询都要从头部或者尾部按顺序查找

既实现了list接口,可实现了Deque接口,而list和queue又集成了collection,所以拥有的方法特别多

 

它常用的方法有9个:

 

linkedlist删除数据:

        删除数据一般是找到匹配项以后,使用迭代器的remove方法进行删除

 

 ArrayList和linkedList 区别:

 

综上所述:ArrayList多用于查询较多的应用场景种,linkedlist多用于频繁增删的场景中

---------------------------------------------------------------------------------------------------------------------------------

HashMap:hash散列,哈希,map映射;哈希map
key-velue的形式存储数据的,这些数据保存在数组中,默认初始容量是16

 

数组是有序的,但是hashmap中的数据并不是按照顺序存放的,而是先根据key计算出hash值,再余数组容量-1

hash值&(数组容量-1),等同于数组容量取余得到的余数就是元素的位置

 

 

 

 如此依赖势必会有多个元素被分配到同一个位置上

 

 hashmap用链表的形式将多个元素链接起来解决了多个元素位置冲突的问题

 

 1.无序

存入顺序,取出顺序

 

2.key可以为null,并且分配的hash值為0

 

 3.key不可以重复,重复的key新值会覆盖旧值;

 

4.hash冲突:它是两个不同的key产生了相同的hash值,发生hash冲突的原因是取值范围的问题,例如一个二进制位取值范围是:0-1,要在这个范围内取值要么是0要么是1,发生hash碰撞的概率是1/2

 

 如果取值范围是16位的时候,发生碰撞的概率会越小

 

在hashmap中hash值是int类型4个自字节长度是32个二进制位

 碰撞的概率是:

 

 更长的hash值意味着碰撞的概率越低,但也需要更大的空间和计算,我们需要在性能和成本之间做好权衡

 5.链化<==>树化

树化:当链表长度大于8,并且容量大于等于64的时候会将链表转化为红黑树

 

 转化为红黑树的目的是为了提高查询速度,因为链表一旦长了以后查询就会变得很慢,

 

链化:另外红黑树也会变回链表,当红黑树种的节点小于等于6的时候,红黑树将转化为链表,这个过程称之为链化,此时的节点数很少,链表与红黑树的查询速度不差上下,而且在新增元素的时候链表不用计算节点的位置,直接插在尾部,但红黑树还要计算节点的位置,因此他们两个相互转换可以形成很好的互补;

 

 

 

 

 

 

 6.扩容:当元素个数超出临界值的时候,hashmap就需要扩容

临界值=容量*负载因子

 

 

 扩容后是之前的两倍,频繁扩容很影响hashmap的性能,所以合适的容量与负载因子至关重要

 

 7.hashmap实现了map接口,拥有map里面的所有方法,其中8个方法是最常用的

 

 

 --------------------------------------------------------------------------------------------------------------------------------

linkedHashMap 链式哈希映射

1.介绍linkedHashMap  linked,链式的意思;hashmap,Hash映射

2.添加顺序

3.访问顺序

4.常用方法

用双向链表来保证了元素的顺序

 来记录的头结点和尾结点

 

 2.添加顺序和取出顺序是一致的

 3.被访问的元素会排在最后,通俗的讲就是被get过的元素会排在最后

 可以设置排序方式:

 有5个构造方法:4个构造方法有默认值,只有一个构造方法是可以指定排序顺序的

 

 

 4.linkedhashmap的常用方法有那些:它既继承了hashmap又实现了map接口

 当时常用的只有8个方法:

 

  ------------------------------------------------------------------------------------------------------------------------------

TreeMap:二叉树映射

 是以二叉树的形式存储数据的,二叉树是红黑树,红黑树拥有自平衡的特点

 

 红黑树的5个性质:

 

 

 

 

 

 

 

 

 

 

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/357795.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号