Java容器-集合框架

jdk1.8容器结构图 此图是根据jdk1.8版本整理. 介绍了java容器的各项数据结构和存储结构: 数组, 列表, 映射, 集合, 栈, 队列等接口和类之间的关系. 灰色背景的不用管. 绿色背景的为接口. 黄色背景的为类. 立即下载

一、java集合框架体系图

Java 容器分为 Collection 和 Map 两大类,其下有很多子类如图:

二、Collection 和 Collections 有什么区别?

1. Collection是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法,实现该接口的类主要有List和Set。

2. Collections是一个集合框架的工具类,包含了很多静态方法,比如一些对集合的排序,搜索以及序列化等操作。(例:排序方法->Collections. sort(list))

三、HashMap和Hashtable有什么区别?

HashMap和Hashtable都是Java中用来实现映射关系的数据结构,它们之间的主要区别:

  1. 线程安全性:Hashtable是线程安全的,而HashMap是非线程安全的。

  1. 同步性: Hashtable是同步的,而HashMap是非同步的。这意味着在多线程环境下使用HashMap时要更加小心,因为它不能保证在并发环境下的安全性。

  1. null值: Hashtable不允许键值或值为null,而HashMap允许一个null键和任意数量的null值

  1. 性能: 由于Hashtable的同步特性,在单线程环境下使用HashMap比使用Hashtable要快。

  1. 另外jdk1.8之后,HashMap和Hashtable在实现方式上也有了区别。

  1. 在使用上也有区别,比如在jdk1.4以前使用Hashtable,jdk1.4以后使用HashMap会更好。

总结来说,HashMap适合单线程环境使用,而Hashtable适合多线程环境使用。

四、List接口中ArrayList的底层实现

1. 首先 我们先点进去看一下ArrayList的底层代码,如图:

2. 那我们就使用Object[]类型的数组和size属性实现ArrayList的增删改查方法


package com.bdqn.MyList.MyArrayList;

public class MyArrayList {

private Object[] array; //获取当前数组的引用

private int size; //获取当前数组的长度

/*

新增指定元素

*/

public void add(Object ob){

if (array==null){

array = new Object[1];

array[0] = ob;

}else {

Object newarray[] = new Object[array.length+1];

//先循环复制以前的内容到新数组

for (int i = 0; i < array.length; i++) {

newarray[i] = array[i];

}

//再把新元素放到最后一个位置即可

newarray[array.length] = ob;

//替换全局变量引用 保证array指向最新的

array = newarray;

}

}

/*

根据下标删除指定元素

*/

public void del(int index){

if (index<0 || index>=array.length){

System.err.println("下标超出范围");

}else {

Object newarray[] = new Object[array.length-1];

for (int i = 0; i < array.length; i++) {

if (i<index){

newarray[i]=array[i];

}else if (i>index){

newarray[i-1]=array[i];

}

}

array = newarray;

}

}

/*

根据传入的下标跟元素 修改

*/

public void update(int index,Object ob){

if (index<0 || index>=array.length){

System.out.println("下标越界");

return;

}

array[index] = ob;

}

/*

历遍展示整个集合

*/

public void show(){

for (Object ob:array) {

System.out.println("["+ob+"]");

}

}

/*

size生成的get、set方法

*/

public int getSize() {

size = array.length;

return size;

}

public void setSize(int size) {

this.size = size;

}

}


package com.bdqn.MyList.test;

/**

* 测试类

*/

import com.bdqn.MyList.MyArrayList.MyArrayList;

public class Test {

public static void main(String[] args) {

MyArrayList list=new MyArrayList();

list.add(3); //添加

list.add(2);

list.add(1);

list.del(1); //删除

list.update(0,4); //修改

list.show(); //查看

}

}

//结果输出为 [4] 换行 [1]

五、List接口中LinkedList的底层实现

1. Node.java


package com.bdqn.MyList.MyLinkedList;

/**

* 节点类

*/

public class Node {

public Object element; //本节点自身的内容

public Node next; //保存下一个节点的引用地址

public Object getElement() {

return element;

}

public void setElement(Object element) {

this.element = element;

}

}

2. MyLinkedList.java


package com.bdqn.MyList.MyLinkedList;

/**

* 链表类

*/

public class MyLinkedList {

private Node root; //头节点 一定要有 不能丢

/*

新增

*/

public void add(Object ob){

Node node = new Node();

node.element = ob;

if (root==null){

root = node; //如果是第一次新增

}else {

//传统的for循环搞不定 while

Node temp = root;

while(temp.next!=null){

temp = temp.next;

} //循环结束以后 那么此时temp自然就定位到了最后一个节点

temp.next = node; //尾巴后面加入新节点

}

}

/*

获取链表的实时长度

*/

public int getLength(){

Node temp = root;

int sum = 1;

while (temp!=null){

temp = temp.next;

sum++;

}

return sum;

}

/*

链表删除

*/

public void delete(int index){

if (index<0 || index>getLength()){

System.out.println("下标越界");

}else {

//假设index=3 要找到2元素(上一个)

if (index==0){

root = root.next; //删头

}else {

Node temp = root;

int a = 0;

while (temp!=null){

//此时 并未完成被删除节点的清空操作

if (a==index-1){

temp.next = temp.next.next;

break;

}

temp = temp.next;

a++;

}

}

}

}

/*

修改

*/

public void update(int Index, Object obj) {

// 判断位置下标是否合法

System.out.println("下标->"+Index);

if (Index < 0 || Index > getLength()) {

System.out.println("下标越界");

} else {

Node temp=root;

System.out.println(temp.next.element);

for (int i = 0; i < Index; i++) {

temp=temp.next;

}

temp.setElement(obj);

}

}

/*

遍历整个链表

*/

public void show(){

Node temp = root;

while (temp!=null){

System.out.println("["+temp.element+"]");

temp = temp.next;

}

}

}

3. Test.java


package com.bdqn.MyList.test;

/**

* 测试类

*/

import com.bdqn.MyList.MyLinkedList.MyLinkedList;

public class Test {

public static void main(String[] args) {

MyLinkedList list=new MyLinkedList();

list.add(1);

list.add(2);

list.add(3);

list.add(4);

list.delete(3);

list.update(1,5);

list.show();

}

}

//运行结果如图:

开源实战 | 基于SolidWorks与Matlab的并联索驱机器人轨迹规划全流程 本文详细介绍了基于SolidWorks与Matlab的并联索驱机器人轨迹规划全流程,涵盖从基础概念到实战技巧的各个环节。通过SolidWorks建模、Matlab运动学实现及轨迹优化策略,展示了如何实现高精度轨迹规划,适用于摄影、医疗等领域的机器人应用。 阅读详情

相关推荐

避坑实录:用certificate-manager重置vCenter 6.7证书时遇到的三个致命陷阱

本文详细解析了使用certificate-manager重置vCenter 6.7证书时可能遇到的三大致命陷阱,包括进度卡在85%的服务启动僵局、脚本突然退出的静默杀手以及密码错误锁死的隐藏机制。通过实战验证的解决方案和高级恢复技巧,帮助系统管理员有效避免vCenter环境瘫痪,确保证书更新过程顺利进行。

g5h6i7j的博客 919

Java集合框架体系(超详细)

集合框架体系 总体的体系图: 在学习体系之前先了解一下迭代器(Iterator):迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。对于集合的输出,有foreach和iterator,iterator更加的常用。 https://www.cnblogs.com/lxq...

weixin_30505043的博客 1023

ffmpeg中av_read_frame阻塞的原因与解决方案

最近用到ffmpeg,想要av_read_frame立即返回,但是看网上的博客,都没有详细的解说,那就自己看源码。 两种方法: 设置回调打断函数和设置超时 超时,但是如果只设置该参数,依然会在av_read_frame中阻塞, av_dict_set(&inputDic, "stimeout", "2*1000*1000", 0); // milliseconds //打断回调 m_avformatCtx->interrupt_callback.callback = interru

weixin_43360707的博客 1万+

Map集合中put()与putIfAbsent()的区别

Map集合中put()与putIfAbsent()的区别 put方法: V put(K key, V value); putIfAbsent方法: V putIfAbsent(K key, V value); 我们可以从map官网注释中看出: 1.使用put方法添加键值对,如果map集合中没有该key对应的值,则直接添加,并返回null,如果已经存在对应的值,则会覆盖旧值,value为新的值。 2.使用putIfAbsent方法添加键值对,如果map集合中没有该key对应的值,则直接添加,并返回null

拒绝熬夜啊的博客 679

Excel COUNTIF函数精确统计全解析:从模糊匹配到精准计数

在数据处理与办公自动化领域,条件计数是数据分析的基础操作,其核心原理在于对特定范围内满足设定条件的单元格进行识别与汇总。Excel中的COUNTIF函数是实现这一功能的常用工具,它通过文本匹配逻辑与通配符机制来执行条件判断。然而,其默认的模糊匹配行为常导致统计结果偏离预期,这正是精确统计的技术价值所在——确保数据汇总的准确性与可靠性,直接影响业务报告、薪酬核算、销售分析等应用场景的决策质量。本文聚焦COUNTIF函数的精确匹配技巧,深入剖析通配符(如星号*和问号?)的转义使用(通过波浪号~),并针对大小写敏

weixin_29040367的博客 353

Docker 与容器技术的未来:从 OCI 标准到 eBPF 的演进

OCI 的核心目标是创建一个开放的、厂商中立的容器技术标准。这意味着,只要一个容器镜像符合 OCI 镜像格式规范,它就可以在任何符合 OCI 运行时规范的容器运行时上运行。eBPF 是一种革命性的技术,它允许在 Linux 内核中安全地运行沙盒程序,而无需修改内核源代码或加载内核模块。这些程序可以注册到内核中的各种事件点(如网络包到达、系统调用、函数调用/返回),并在事件发生时执行自定义逻辑。核心思想是:在不将数据复制到用户空间的情况下,程序可以直接在内核中处理数据,极大地提高了效率和性能。

专栏 1383

超全Java集合框架讲解(建议收藏)

是一个实现 Set 的一个抽象类,定义在这里可以将所有具体 Set 集合的相同行为在这里实现,避免子类包含大量的重复代码所有的 Set 也应该要有相同的hashCode()和equals()方法,所以使用抽象类把该方法重写后,子类无需关心这两个方法。// 判断两个 set 是否相等if (o == this) { // 集合本身(o instanceof Set)) { // 集合不是 set} else {// 比较两个集合的元素是否全部相同// 计算所有元素的 hashcode 总和。

白话机器学习 2621

Mplus—交叉滞后面板模型(Cross-Lagged Panel Model, CLPM)

本文介绍交叉滞后模型相关知识,以及显变量模型与潜变量模型在Mplus中的语法。

m0_54401011的博客 1万+

Java基础知识之容器(一:容器整体框架探索)

本篇博客主要介绍Java容器的框架,我们根据框架重上向下的顺序一个个探究其源码,来达到掌握容器的骨架。至于容器的细节放到下一篇来探讨。一:基本概念Java容器类库的用途是保存对象,根据数据结构不同将其划分为两个不同的概念 Collection,一个独立元素的序列,其中List按照元素的插入顺序保存元素,而set不能有重复元素,Queue按照先进先出(FIFO)的方式来管理数据 Map,一组键值对(k

吃透Java 838

计算机网络技术研究方向有哪些创新点

计算机网络技术方向的创新点众多,这些创新不仅推动了网络技术的不断发展和完善,还为用户提供了更高效、更安全、更便捷的网络服务。- 边缘计算是一种将计算和数据存储推向网络边缘的技术,通过将数据处理和分析的任务分散到网络的各个节点,降低了数据传输的延迟,提高了实时性。- 通过网络自动化工具和技术,可以实现网络配置的自动化、网络故障的自动诊断与修复等功能,降低了网络运维的复杂性和成本。- 通过引入人工智能技术,网络可以实现更智能的流量管理、故障预测和自动修复等功能,提高了网络的性能和稳定性。

Loving_enjoy的博客 1495

《备考系统分析师》 - 专栏介绍和目录

本专栏提供软考高级系统分析师全套备考资料,包含四大核心内容:1.详细考点梳理(覆盖基础知识、关键技术、案例实践三大模块16个章节);2.历年真题及解析(2009-2022年所有真题含综合知识、案例分析和论文);3.100+篇高质量论文范文;4.预测模拟题。早鸟价仅需9.9元,可节约80%资料搜集时间,帮助考生高效备考、顺利通过考试。专栏持续更新,有问题可随时联系作者。

数据知道的博客 1万+

Java学习总结(2021版)---集合

这里写目录标题一、 Java集合框架概述二级目录三级目录 一、 Java集合框架概述 1. 理解 2.集合框架涉及到的API Java 集合可分为 Collection 和 Map 两种体系。 Collection接口:单列集合,用来存储一个一个的对象 List接口:存储有序的、可重复的数据。 -->“动态”数组 实现类:ArrayList、LinkedList、Vector Set接口:存储无序的、不可重复的数据 -->高中讲的“集合” 实现类:HashSet、LinkedHash

m0_51755061的博客 372

基于simulink构建一个完整的航空航天器姿态控制与导航仿真模型

航空航天器的姿态控制与导航系统是确保飞行器稳定运行和精确执行任务的核心技术。其目标是通过传感器获取飞行器的状态信息,并利用控制器调整飞行器的姿态,使其按照预定轨迹飞行。基于MATLAB/Simulink平台进行航空航天器姿态控制与导航系统的建模与仿真,可以帮助研究者验证算法性能并优化系统的动态响应。本项目旨在构建一个完整的航空航天器姿态控制与导航仿真模型,包括飞行器动力学建模、传感器模块设计、控制器实现以及导航算法仿真,并通过仿真分析其性能。

xiaoheshang_123的博客 272

Java容器【集合框架】

Java容器【集合框架】 容器也叫集合,是用来容纳和管理数据的。就比方说数组,也是一种容器,可以在其中放置对象和基本类型的数据。 一、泛型Generics 泛型是JDK1.5以后增加的,它可以帮助我们建立类型安全的集合。在使用了泛型的集合中,遍历时不必进行强制类型转换。JDK提供了支持泛型的编译器,将运行时的类型检查提前到了编译时执行,提高了代码可读性和安全性。 泛型的本质就是“数据类型的参数化...

GZAY的博客 354

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JAVA-集合框架和容器

一,为什么要使用集合框架? 因为在大多数的时候在自己定义的容器里面是不够用得的所以就会用到集合框架 如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象——可以使用Java集合框架 在集合框架中为java提供了一套完整的一套性能优良的方法方便的接口和使用的类,它们都统一在java.util这个包里面 二,容器的概念 容器(Container) Spring 提供容器功能,容器可以管理对象的生命周期、对象与对象之间的依赖关系,您可以使用⼀个配置文件(通常是XML),在上⾯定义好对象的

Jang_sir的博客 167

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java集合框架【二容器(Collection)[ArrayList]】

程序中的“容器”,用来容纳和管理数据。我们在之前所学习的数组就是一种容器,可以在其中放置对象或基本数据类型数据。数组的优势:一种简单的线性序列,可以快速访问数组元素,效率高。从效率和类型检查角度来讲,数组是最好的。劣势:不灵活。容量需要事先定义好,不能根据需求的变化而变化。由于数组并不能满足我们对“管理和组织数据的需求”,所以我们需要一种更强大、更灵活、容量可以随时变化的容器来装载对象。Collection是单例集合跟接口,它是集中收集的意思。

缘友一世的博客 602

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java 集合框架 容器

一、ArrayList顺序结构 1. ArrayList 数组申请固定长度之后,未使用的属于浪费。 为了解决数组的局限性,引入容器类。如ArrayList. 容量capacity会随着元素增加自动增加,不用考虑边界问题。 @SupressWarnings("rawtypes") ArrayList mans = new ArrayList(); mans.add(new Man()...

Neil的博客 298

Java 集合框架终极指南:选对容器,事半功倍

在Java开发中,集合框架如同工匠的工具箱。选错容器,代码效率低下、内存浪费、并发隐患暗藏;选对容器,则逻辑清晰、性能优异、扩展自如。本文将深入探讨集合选择的策略思维,助你避开常见陷阱。

duolapig的博客 960

Java集合容器框架

文章目录一、迭代器Java的迭代器(iterator)二、Collection(单列集合)1. List接口2. Set接口3. Queue接口3.1 源码3.2 常见实现类3.3 子接口:Deque接口常用方法和堆栈的联系三、Map(双列集合) 一、迭代器 迭代器(iterator),是确使用户可在容器对象(container,例如链表或数组)上遍访的对象,设计人员使用此接口无需关心容器对象的内存分配的实现细节。其行为很像数据库技术中的光标(cursor),迭代器最早出现在1974年设计的CLU编程语.

豆小匠的博客 223

Java 容器类(集合框架)

Java 容器类(集合框架)主要用于存储和管理对象,核心接口分为 ​​(单值集合)和 ​​(键值对集合)两大类。

夏寻的博客 644

【JAVA集合框架二 】java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类...

本文关键词: java集合框架 框架设计理念 容器 继承层级结构 继承图 集合框架中的抽象类 主要的实现类 实现类特性 集合框架分类 集合框架并发包 并发实现类 什么是容器? 由一个或多个确定的元素所构成的整体叫做集合。 容器用来包装或装载物品的贮存器 (如箱、罐、坛)或者成形或柔软不成形的包覆材料。 在Java中的Collection...

weixin_33998125的博客 148

Java集合框架(四) - 一些其他的容器

Java集合框架中,除过List、Set以及Map,还有一些其他的容器。比如:队列(queue),栈(Stack) 栈以及队列中的一些方法 import java.util.*; import java.util.concurrent.ArrayBlockingQueue; public class Demo { public static void main(String[] ...

wyw15667121424的博客 184

java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类...

本文关键词: java集合框架 框架设计理念 容器 继承层级结构 继承图 集合框架中的抽象类 主要的实现类 实现类特性 集合框架分类 集合框架并发包 并发实现类 什么是容器? 由一个或多个确定的元素所构成的整体叫做集合。 容器用来包装或装载物品的贮存器 (如箱、罐、坛)或者成形或柔软不成形的包覆材料。 在Java中的Collection框架,有的人叫做集合有的叫做容器...

noteless的博客 320

总览 Java 容器--集合框架的体系结构

我们在讲 Java 的数据类型的时候,单独介绍过数组,数组也确实是开发程序中常用的内存类型之一,不过 Java 内置的数组限制颇多,所以此后扩展出了List这种结构,与之类似的Set、Queue 这些内存中的容器都被放在了 Collection 类族下,加之另一种代表常用的数据结构 Map 类族,这些聚合到一起构成了 Java 中集合框架的整个体系。一些 Map 实现类,如 TreeMap 类,对它们的顺序做出特定保证,其他的,比如 HashMap 类则没有任何顺序上的保证。List 表示元素的有序集合。

老男孩的架构路 162
上一篇: MyBatis —resources下的核心配置文件mybatis-config.xml
下一篇: Java中的反射机制
唯爱记录
博客等级 码龄4年 138粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值