java--集合概述(自己玩慢慢梳理)

集合概述:

    java中,用来存储大量相同结构的数据的时候,可以采用集合,集合可以帮你进行数据存储,修改,查询等操作,方便快捷

集合家族

    如图,这些都是集合家族 中的一员  不同集合优缺点不同,采用不同的数据结构,导致有不同的特性,对于某些特定场景,相信总有一款适合你

 

集合分类

    一般我们会把集合分为两大类  

         一类是Collection  另一类是Map  两个并没有太大的联系,只不过都可以用来存放一些数据,实际来说,想用啥 看他们的特性,看你的需求

     题外话: 集合和数组的区别

     1.集合长度可变(底层会在容量不足的时候,自动扩容),数组长度固定(当创建数组的时候必须指定数组长度)

     2.集合只能存放引用类型数据 , 数组可以存放基本类型和引用类型

     3.同一个集合可以存储不同类型(现实情况是大部分都是存放一种类型,因为毕竟用来存放同一种数据的) ,数据只能存放同一种类型(因为在创建数组对象的时候就已经指定类型了)

Collection

   Collection 是集合基础的接口,也是一个抽象接口 继承了Iterable接口,可以理解为集合的祖宗类,java并没有给出其直接继承的类,java中可以直接使用他的子类 例如List和Set,但是无论是什么继承类(java提供的,还是大佬基于Collection自己写的实现类,都可以使用Iterator进行集合遍历,是因为 Collection已经继承的Iterable接口)

Collection之List

Collection中的List集合 是一个有序,可重复的数据集合,其中因为底层的数据结构使用的是数组,因为其索引结构具有查询快,增删慢的特性,因为索引直接指向期对应的存储对象的地址,所以查询的时候可以快速查询到,但是在增加,删除的时候,底层数据会做出大量迁移的操作,修改指向对象和前后索引关系.实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。

LinkedList(linked:链表 ,List:集合) 又称链表集合

LinkedList实现了List接口,也就继承了List的特性,存储有序且可重复,且对象可以为空,但是他在获取元素方法上增加了获取第一个元素,最后一个元素的方法,这种特性和栈特性比较像,所以导致的LinkedList集合可以当做栈来用;

  特点: 底层数据结构是链表, 查询慢(但是其中有新方法,当查询数据指针大于其总个数一半的时候,会从后面开始查),增删快,能存放重复数据,效率较高;

ArrayList(Array:数组,List:集合) 又称数组集合

ArrayList实现了List接口,也就继承了List的特性,存储有序且可重复,且对象可以为空,因为底层数据结构是数组,所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点;

特点: ArrayList自动扩容机制;使用arrayList的时候不用想数据那样指定初始长度,因为其自动扩充机制,在数据存储过程中不断判断元素,当条件满足的时候,会将长度自动扩容

Vector

Vector 是矢量队列,它是JDK1.0版本添加的类。继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口,因为其继承了AbstractList,实现了List;所以,它是一个队列,支持相关的添加、删除、修改、遍历等功能
Vector 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在Vector中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。
Vector 实现了Cloneable接口,即实现clone()函数。它能被克隆。

和ArrayList不同,Vector中的操作是线程安全的。LinkedList和ArrayList均为线程不安全的集合,打开Vector 底层逻辑可以看到,Vector 大部分方法都加上了synchronized 进行业务锁处理,这样可以在一定程度上保证数据操作的完整性和一致性,但是缺点就是因为使用了线程锁,导致了资源消耗比较大(所以现在基本不常用)

Collection之Set

Collection中的Set集合 是一个无序,不可重复的数据集合,实现Set接口的常用类有HashSet和TreeSet两大实现类。

HashSet

    HashSet是一个是一个无序,不可重复的数据集合,底层的数据结构是哈希表;存储数据无序且不安全,多个线程操作一个数据的时候,需要通过代码实现同步操作

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值