List与Set接口

Collection接口存储一组不唯一无序对象#

List接口存储一组不唯一有序对象#

Set接口存储一组唯一无序对象#

Map接口存储一组键值对象,提供key到value的映射#

LIst接口实现(有序,不唯一)#

ArrayList(顺序表)#

  • 实现了长度可变的数组,在内存中分配连续的空间
  • 优点,遍历元素和随机访问元素的效率比较高
  • 缺点,添加和删除需要大量移动元素,效率低,按内容查询效率低

LinkedList(链表)#

  • 采用链表的形式
  • 优点,插入、删除元素效率较高
  • 缺点,遍历和随机访问元素效率较低

 ArrayList与Vector#

  • ArrayList线程不安全,效率高,Vector是线程安全的,效率低
  • ArrayList在进行扩容的时候,是扩容1.5倍(OldCapacity + OldCapacity>>1)
  • Vector在进行扩容的时候,是扩容2倍(oldCapacity + ((capacityIncrement > 0)?capacityIncrement:oldCapacity))

Iterator接口#

  • 所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象
  • Iterator对象称作迭代器,用以方便实现对容器内元素的遍历操作

增强for循环(本质上用的iterator功能)#

for(Object i:list){
    System.out.println(i)
}

所有集合类都默认实现了Iterable的接口,实现此接口意味着具备了增强for循环的能力

iterator方法,返回一个Iterator的接口子类实例对象

  • 在使用iterator进行迭代的过程中如果删除其中的某个元素会报错,并发操作异常
  • 如果遍历的同时需要修改元素,建议使用listIterator()
  • ListIterator迭代器提供了向前和向后两种遍历方式
  • 始终通过cursor和lastret指针获取元素值及向下的遍历索引
  • 使用向前遍历时必须保证指针在迭代器的结果,否则无法获取结果值

Set接口中的实现类#

  • Set接口存储一组唯一,无序的对象
  • 存入和取出的顺序不一定一致
  • 操作数据的方法与List类似,Set接口不存在get()方法

 Hashset( 采用Hashtable存储结构,即散列的链地址法)#

  • 优点,添加速度快,查询速度快,删除速度快
  • 缺点,无序
  • LinkedHashSet,采用哈希表存储结构,同时使用链表维护次序
  • 有序(添加顺序)

TreeSet#

  • 采用二叉树(红黑树)的存储结构
  • 优点,有序(排序后的升序)查询速度比List快
  • 缺点,查询速度没有HashSet快

红黑树,特殊的平衡树#

  • 自平衡二叉查找树
  • 结点是红色或黑色
  • 根结点是黑色
  • 每个叶结点是黑色
  • 每个红色结点两个子结点都是黑色
  • 任一结点到每个叶子所有路径都包含相同数目的黑色结点
  • 最长路径不超过最短路径两倍

HashSet如何保证元素的唯一性#

  • 通过元素的两个方法,hashCode和equals方法来完成
  • 如果元素的HashCode值相同,才会判断equals是否为true
  • 如果元素的hashCode值不同,不会调用equals方法

TreeSet#

  • 采用二叉树的存储结构
  • 优点,有序(排序后的升序)查询速度比list快
  • 缺点,查询速度比HashSet慢

Comparable接口#

所有可以"排序"的类都实现了java.lang.Comparable接口,Comparable接口中只有一个方法

复制代码
// 非源码,大概流程
public int compareTo(Object obj){
    int a, b;
    if(this == obj){
        return 0;
    }
    if(this > obj){
        return a;// 正数
    }
    if(this < obj){
        return b;// 负数
    }
}
复制代码

实现了Comparable接口的类通过实现comparaTo方法从而确定该类对象的排序方式

posted @   BigBender  阅读(126)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2019-12-30 B1012. 数字分类
2019-12-30 B1008. 数据元素循环右移问题
2019-12-30 函数的概念
2019-12-30 编译原理--引论(四)
2019-12-30 编译原理--引论(三)
2019-12-30 2012年英语一小作文
2019-12-30 函数连续性
点击右上角即可分享
微信分享提示
主题色彩