Java中集合和列表有什么区别呢?

戚薇 Java经验 发布时间:2023-07-10 22:13:48 阅读数:4087 1
下文笔者讲述java中集合和列表的区别说明,如下所示
集合和列表最大的区别
    集合无序、不可重复
    列表有序、可以重复
例:

list列表
允许重复元素

ArrayList:
   以数组实现,不支持同步
   使用索引快速定位访问
   插入删除慢
    因为每次插入/删除将会使后面元素向后/前移动
    适合变动不大,主要用于查询的数据
    和数组相比,其容量大小可动态调整

LinkedList

以双向链表实现,不支持同步
可当作堆栈、队列、双端队列进行操作
顺序访问高效
   随机访问差
插入和删除高效
   因为只需改变元素指针
    而无需移动元素
适用于经常变化的数据

集合(在java中集合列表都可以叫集合)
一个是单列集合Collection
 双列集合Map

Collection--List接口和Set接口的根接口

List接口

List集合特点:
  元素有序、元素可重复;
List接口继承自Collection接口
  在List集合中允许出现重复的元素
   所有的元素都是以一种线性方式存储的
   程序中可通过索引(下标)来访问集合中的指定元素
   List集合的元素有序
   即元素的取出顺序和存入顺序一致

1.ArrayList--(适合大量遍历和查找元素的情况)

ArrayList
  内部封装一个长度可变的数组对象
  当存入的元素超过数组的长度时
  ArrayList会在内存中分配更大的数组来存储这些元素
  ArrayList可以看为是一个长度可变的数组
  ArrayList内部存储结构形式导致
  ArrayList在增加或删除元素的时候会创建新的数组效率比较低
  故不适合大量的增删操作 

LinkedList–可用于大量增删元素的情况

LinkedList
   内部结构
   有两个Node类型的first和last属性维护一个双向循环链表
   链表中的每一个元素
      都保存前一个元素和后一个元素

Set接口

Set集合的特点是元素无序、不可重复;
Set接口同样是继承自Collection接口
   与Collection接口中的方法基本一致
Set接口中的元素无序
   且会以某种规则保证存入的元素不出现重复

1.HashSet

HashSet:
  根据对象的哈希值来确定元素在集合中的存储的位置
   具有优秀的存取和查找能力
  所存储的元素是不可重复
   元素是无序
存储过程:
  向HashSet集合对象添加一个元素的时候
  首先调用该元素的hashCode()方法返回对应的哈希值进行计算确定元素的存储位置
  然后再去调用元素的equals()方法保证没有重复元素

2.TreeSet

TreeSet:
  以二叉树的方式来存储元素
  可以实现对集合的的元素进行排序!
TreeSet:
  内部结构存储是平衡二叉树
  使用平衡二叉树可以保证TreeSet中没有重复的元素
   还可以对元素进行排序。
   这个过程:
     存入新元素的时候
     这个元素会跟最顶层元素相比较 
	 若小于最顶层元素,则进入左边分支
        继续执行(继续比较)下去
      直到最后一个元素
     如果小于最后一个元素则放在其左子树上
     如果大于最后一个元素则放在右子树上
     若大于则进入右分支,道理和左边的一样。
     当向TreeSet中存入一个元素时
     会调用Comparable接口中的compareTo方法将该元素与其它元素进行比较
     最后将它插入到有序的对象序列中
      当然
        也可以自己指定排序的规则
        就是使用Comparator接口重写compare方法。

二、Map

Map接口是双列集合
   key-value型
   也是映射关系
 一个键对象key唯一对应一个值对象value
  但是一个值对象value可以有多个键对象key
  此外
   key和value可以是任意数据类型
   键对象key不允许重复

一、HashMap

HashMap存储键值映射关系
   该集合的键和值允许为空
    (键可以为null,值也可以为null
     如果有两个键都为null,那么会覆盖第一个null键)
   但是键不能重复,而且集合中的元素是无序
HashMap的底层存储结构
   由哈希表结构(大致就是数组+链表,主体结构是数组)组成
    链表:
	 解决哈希值冲突而存在的分支的结构
     HashMap对于元素的增删查改的操作效率都比较高

二、TreeMap(值可以为null,键不能)

TreeMap:
  用来存储键值对映射关系的
    并且不允许出现重复的键。
TreeMap内部结构:
  二叉树(可保证键的唯一性
    因为一个顶点的位置是不能存在两个点的)
  与TreeSet集合存储的原理是一样的按照某种顺序排列
  与TreeSet一样,TreeMap可以通过自定义比较器的方式对所有的键进行定制排序。
当未实现Comparator 接口时
   key不可以为null
    否则抛 NullPointerException 异常;

当实现Comparator接口时
   若未对null情况进行判断
   则可能抛 NullPointerException异常
 如果针对null情况实现,可以存入
   但是却不能正常使用get()访问,只能通过遍历去访问
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202307/16889984827052.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者