当前位置: 首页 > news >正文

【Java】【集合】集合框架Collection

文章目录

    • Java集合框架
      • Collection
        • List
        • Queue
        • Set

Java集合框架

在这里插入图片描述
Java 集合,也称作容器,主要是由两大接口 (Interface) 派生出来的:Collection 和 Map:
Collection 存放单一元素。Map 存放 key-value 键值对。

Collection

常用API,操作集合CRUD(Create, Read, Update, and Delete):

boolean add(E e);
boolean addAll(Collection<? extends E> c);
boolean remove(Object o);
boolean removeAll(Collection<?> c);
boolean contains(Object o);
boolean containsAll(Collection<?> c);
boolean isEmpty();
int size();
Object[] toArray(); // 集合转数组

List

  • 有序,可重复
  • 实现方式有 LinkedList 和 ArrayList 两种
功能方法ArrayListLinkedList
add(E e)O(1)O(1)
remove(int index)O(n)O(n)
set(int index, E e)O(1)O(n)
get(int index)O(1)O(n)

1、ArrayList

  • 数组实现,可以随机访问,查找快。
  • 物理连续性,增删中间元素需移动后续元素。指定 index 添加数据,就需要拷贝 index 后面的数据后移一位。
  • 动态数组,初始化时是一个空数组,在第一次 add 时设置初始容量为 10,每次扩容都增加到原来的 1.5 倍。

2、LinkedList

  • 链表实现,查找元素需从头访问
  • 增删快

3、Vector

  • 数组实现
  • 弃用,线程安全,但是太多synchronized,效率低

4、ArrayList和Vector区别

  • Vector线程安全
  • 扩容机制,ArrayList增量右移一位即/2,新容量是原容量1.5倍。Vector新容量是2倍。

5、Stack

  • 弃用,使用ArrayDeque实现

Queue

1、Queue两组API,功能相同,用法区别:

功能抛异常返回值
add(E e)offer(e)
remove()poll()
element()peek()

2、 Deque双端队列,针对两端:

功能抛异常返回值
addFirst(e)/ addLast(e)offerFirst(e)/ offerLast(e)
removeFirst()/ removeLast()pollFirst()/ pollLast()
getFirst()/ getLast()peekFirst()/ peekLast()

3、实现类:LinkedList、ArrayDeque、PriorityQueue

  • 普通队列:LinkedList、ArrayDeque
  • 优先队列:PriorityQueue
  • 栈:ArrayDeque
  • LinkedList、ArrayDeque区别
    ①ArrayDeque 是一个可扩容的数组,LinkedList 是链表结构;
    ②ArrayDeque 里不可以存 null 值,但是 LinkedList 可以;
    ③ArrayDeque 在操作头尾端的增删操作时更高效,但是 LinkedList 只有在当要移除中间某个元素且已经找到了这个元素后的移除才是 O(1) 的;
    ④ArrayDeque 在内存使用方面更高效。
    所以,只要不是必须要存 null 值,就选择 ArrayDeque 吧!

Set

  • 无序,不重复
  • 实现类:HashSet、LinkedHashSet、TreeSet

1、HashSet
采用 Hashmap 的 key 来储存元素,主要特点是无序的,基本操作都是 O(1) 的时间复杂度,很快。
2、LinkedHashSet
HashSet + LinkedList 的结构,特点就是既拥有了 O(1) 的时间复杂度,又能够保留插入的顺序。
3、TreeSet
采用红黑树结构,特点是可以有序,可以用自然排序或者自定义比较器来排序;缺点就是查询速度没有 HashSet 快。


参考
https://mp.weixin.qq.com/s?__biz=MzAwNDA2OTM1Ng==&mid=2453144514&idx=2&sn=3b14fa92bd3d129d5c60a2eea0c5869f&scene=21#

相关文章:

  • 这些年,我与Google不得不说的那些事儿
  • Opencv——图像模板匹配
  • 【秋招面经】之神策数据
  • Spring 有几种事务隔离级别?
  • 若依(RuoYi )权限管理设计
  • 【024】 快速上手mongoose web服务器
  • DevOps自动化测试的原则和实践
  • `SpringBoot`+`axios`结合发送`ajax`请求
  • 电子元器件产业发展遇新机,SRM供应商协同管理系统实现与供应商的敏捷协同
  • C#基础入门教程-基本语法
  • TensorRT安装记录(8.2.5)
  • C++ 池式组件 线程池 内存池 异步请求池 MySQL连接池
  • SwiftUI 动态岛开发教程之 05 Dynamic Island 和 Live Activity 无需太多代码即可为用户提供大量信息
  • XDU2019级保研数据统计分析
  • 网课查题使用方法
  • es6--symbol
  • httpie使用详解
  • iOS | NSProxy
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JS基础之数据类型、对象、原型、原型链、继承
  • ng6--错误信息小结(持续更新)
  • uva 10370 Above Average
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 使用 @font-face
  • 微服务框架lagom
  • 微服务入门【系列视频课程】
  • 用element的upload组件实现多图片上传和压缩
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • # 数论-逆元
  • #pragma data_seg 共享数据区(转)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $.ajax,axios,fetch三种ajax请求的区别
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (007)XHTML文档之标题——h1~h6
  • (1)Nginx简介和安装教程
  • (1)虚拟机的安装与使用,linux系统安装
  • (C)一些题4
  • (三)Honghu Cloud云架构一定时调度平台
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)大道至简,职场上做人做事做管理
  • (转载)OpenStack Hacker养成指南
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • *1 计算机基础和操作系统基础及几大协议
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .net 程序发生了一个不可捕获的异常
  • .NET 事件模型教程(二)
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .Net 应用中使用dot trace进行性能诊断
  • .NET框架
  • .NET设计模式(8):适配器模式(Adapter Pattern)