关于Collection集合

10 篇文章 0 订阅

Collection集合

Coeclltion集合为一个接口,List和Set接口继承了该Coeclltion。
List有实现类ArrayList、LinkedList和Vector。
Set有实现类HashSet和接口SortedSet,TreeSet类实现了接口SortedSet。
集合只能存储引用类型,如果在集合中add基础类型时会自动装箱。
关系图为下:在这里插入图片描述

  • List接口:有序、有下标、元素可重复。
  • Set接口:无序、无下标、元素不能重复。

标题Collection集合中的遍历:

  • 1、使用增强for
    在这里插入图片描述
  • 2、使用迭代器Iterator(迭代器重不能用Collection的方法)
    在这里插入图片描述

标题List集合中的遍历:

  • 1、使用for

  • 2、使用增强for

  • 3、使用迭代器
    在这里插入图片描述

  • 4、使用列表迭代器ListIterator,比普通的迭代器多增加了前后遍历的方法和get下标。
    在这里插入图片描述

ArrayList(1.2加入)

数组结构实现,查询快、增删慢,运行效率快,线程不安全。

删除操作中使用匿名对象,需要重写equals方法
在这里插入图片描述
在这里插入图片描述
ArrayList遍历:

  • 1、迭代器
  • 2、列表迭代器
    在这里插入图片描述

ArrayList源码部分解析

  • 默认容量DEFAULT_CAPACITY=10
  • 存放元素的数组elemtData
  • 实际元素个数size
  • 扩容机制为扩容为原来的1.5倍
Vector(1.0加入)

数组结构实现,查询快、增删慢,运行效率慢,线程安全。

Vector遍历

  • 使用枚举器(1.2之前)
    在这里插入图片描述
LinkedList

链表结构实现,增删快、查询慢。(双向链表)

LinkedList遍历

  • 1、使用for遍历
  • 2、使用增强for
  • 3、使用迭代器
  • 4、使用列表迭代器
    在这里插入图片描述
    在这里插入图片描述
ArrayList和LinkedList的区别

ArrayList是数组结构,数据区域连续,LinkedList是双向链表结构,数据不连续。

Set集合

Set的遍历:

  • 1、使用增强for
  • 2、使用迭代器
    在这里插入图片描述
HashSet
  • 基于HashCode计算元素的存放位置。
  • 当存入元素时的哈希码相同时,会调用equals方法进行确认,如结果为true,则拒绝后者存入。(注意:新建实例化对象时,就算对象内数据相同,哈希码计算会不同)
  • HashSet存储结构为哈希表(数组+链表+红黑树)

HashSet的遍历:

  • 1、使用增强for
  • 2、使用迭代器
    在这里插入图片描述
    HashSet存储过程:
  • 1、根据hashcode计算保存位置,如果差位置为空,则直接保存;如果不为空,则执行第二步。
  • 2、第二步再执行equals方法,如果结果为true,则认为元素重复,否则形成链表。

重写HashCode方法时:

  • 1、可以使用质数相加可以减少散列冲突。
  • 2、使用质数31可以增加执行效率31x i=(i<<5)- i。

简单重写hashCode在这里插入图片描述
在这里插入图片描述
另一种重写hashCode在这里插入图片描述

TreeSet

TreeSet:

  • 基于排列顺序实现元素不重复。
  • 实现了Sorted接口,对集合元素自动排序。
  • 元素对象的类型必须实现Comparable接口,指定排序规则。
  • TreeSet存储结构为红黑树。
  • TreeSet存储对象要实现Comparable接口,compareTo()返回为0则认为是重复元素。此外还可以不实现Comparable接口而是在创建实例化对象时使用比较器comparator。

实现Comparable接口:
在这里插入图片描述
用comparator比较器:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值