集合框架

简介:

HashSet集合:

  add方法:是添加方法,用于将添加对象添加到数组里。例如:

3ee673302e9f5bd92dd078397547a1bd.png


  addAll方法:是批量添加方法,可以利用一个集合先把数据都添加到这个集合里,然后再拿到这个集合对象使用批量添加方法将这个集合对象添加到指定的集合里,就实现了批量添加:

9568ec09accd869efbaa141986875b40.png


remove:删除方法,可以删除指定的某个元素,会把集合的元素也删除掉:

29dcb1761b0f48a56ae8286a8ea6dd3e.png


  removeAll:批量删除方法,同样的可以利用一个集合先把需要数据都添加到这个集合里,然后再拿到这个集合对象使用批量删除方法将这个集合对象添加到指定的集合里,就实现了批量删除:

6803806ccd5529611a9bfe31d83a4a8a.png


retainAll:交集删除,删除传递过去的这个集合里没有的元素:

9bb92b09b68cd749d7a31634a90e04d9.png


clear:清除所有数据方法,可以将集合里的数据全部删除:

051059a1e7964464b2be2d4793be8983.png


isEmpty:可以用于判断一个变量是否有初始化,换句话说就是判断里面是不是没有数据,有数据会就返回false,没有数据就会返回true,返回值是boolean类型:

daa2a09a8c6e92fc40d59021d7a172ed.png


contains:判断某个集合是否含有某个元素,有酒返回true,没有则返回false,返回值是boolean类型:

2940e3ab1f5db6c0e7d826953b571bf2.png


  Iterator:迭代器,可以用来对集合里的元素进行遍历,这是一个接口,需要使用iterator方法来获得对象,迭代器的对象可以调用hashNext方法,这个方法会使用hash值找到集合里每一个下标,每找到一个就返回一个boolean类型,找到就返回true,没有就返回false。然后再使用next方法将下标里的值打印出来就实现了集合遍历:

caaacc6cb14c93a7163e977b3de98eda.png


运行结果:

c3c3afc00686f332d50c9455b69b6aec.png



使用HashSet的删除方法删除某个对象的时候,如果这个对象的类里没有重写equalshashcode方法的话是无法删除的。因为HashSet集合使用hash值来定位下标的,把下标定位好后才能使用equals来比较对象里的内容是否相等。然后才能准确的进行删除,不重写这两个方法,默认调用的是Object的,所以两个内容相同的对象得到的hash值是不一样的,自然也就无法进行删除:

 

如果不重写方法:

0e7a28904fcccd3011a93773911e6a18.png


运行结果:

585a270f7769334ab3f43a7cf862a6ef.png


可以从运行结果看出无法进行删除,即便调用删除方法后这个值仍然存在。



重写方法:

e5443376d526f93bf13224af3d8df69c.png

a24c6713c83d61b704e2aadf39470f44.png


运行结果:

d7cd3ff080022ea1e761282e8e612fc9.png

可以从运行结果看出重写了方法后值就被成功的删除掉了




Tree集合:

Tree集合是二叉树结构的集合,会把相近的值放在一起,所以这种结构也起到了一定的排序作用,例如操作系统的文件就是tree这种排序结构。

Tree结构图:

97073baf65ec0432930a5bd7b1c0dbbb.png


代码示例:

345027ffa0083948b3142b571f3ceff8.png


运行结果:

5f1e4f4c96ee96f915952debfc2373bb.png

从运行结果可以看出是有一定排序的



ArrayList集合与Vector集合:

ArrayList集合是不带线程安全的数组集合,Vector集合则是带有线程安全的数组集合,两者区别就在于此,其他方法什么的都是一样的。

add:添加方法,可以直接添加,也可以选择从某个下标的位置开始添加:

e8488976ece3426a4c8540149c427003.png


ArrayList集合在new对象的时候可以向构造器传递一个int值来事先确定数组的长度,这样就能省去扩容的时间(前提是确定自己需要用多少长度)

5c96e2a65da9f75e985539742256fb0a.png


addAll:批量添加方法,可以将一个集合里的数据批量添加到另一个集合中,同样的也可以选择某个下标开始添加:

e42979d4d422a01582f1f39cd54f494b.png


get:按下标拿出一个值方法:

d9483840bbdb97b677585b605bd553f7.png


remove:按下标删除方法:

1658d4e74e57f696f8bca5df68273b33.png


removeAll:批量删除方法,可以将一个集合里的数据批量删除:

0a52589876dfd45feef0042534dc48b6.png



indexOf:从前面开始查找这个对象在数组里的下标,查找到了返回这个对象的下标,没查找到则返回-1,和字符串的indexOf是一样的:

ab415610e0dda76cabe62ee4ab55a07e.png


  lastIndexOf:从后面开始查找这个对象在数组里的下标,同样的查找到了返回这个对象的下标,没查找到则返回-1

b67110dbb9f1b142be0138b9133d2db4.png


set:可以使用这个方法覆盖某一个下标的值:

64122f44cf72878575876d8bacf0604f.png


利用迭代器在ArrayList集合里正序遍历和倒序遍历:

e77d6ba31902d7449c01428ed24472b2.png


运行结果:

d4fe5ae04e4b72543d705ae95b49b579.png



使用ArrayList的删除方法删除集合里某个对象的时候,如果这个对象的类里没有重写equals方法的话是无法删除的。因为不重写这个方法,默认调用的是Object的,所以两个内容相同的对象得到的返回值是false,需要自己重写equals来比较对象里的内容是否相等。然后才能准确的进行删除,不重写的话自然也就无法进行删除:

52135bc5a33602ef04a7a6cf81009b86.png

395ad72882fa22d3f2d3c836f8f80239.png



LikedList集合:

双链表集合,双链结构能够记录上家和下家,而且有链头和链尾,就像一条车链一般,其特性是方便灵活。

add方法:添加方法,默认是从后面开始添加:

3da8b36d64193d99e7b1eb35c01ea15e.png


addFirst方法:从最前面添加方法,如果添加一个在最前面,则这个添加的就成为了链头:

41cda5bd6dd328c8d047a9524bb3edf4.png


  addLast方法:从最后面添加方法,其实就是add方法,因为add默认就是从最后面开始添加的:

1010851bfedbf73a49b0543da7c17c25.png


使用迭代器遍历LikedList集合:

5d8102c95bee11dfcc3135146557d513.png


运行结果:

0d4def4c17926300866d427c7cb244c6.png

LikedList集合还有队列的特性,就是像排队一样,一个个的进,一个个的出。




本文转自 ZeroOne01 51CTO博客,原文链接:http://blog.51cto.com/zero01/1976536,如需转载请自行联系原作者
相关文章
|
缓存 应用服务中间件 nginx
安装nginx-http-flv-module模块
本文介绍如何为Nginx安装`nginx-http-flv-module`模块。此模块基于`nginx-rtmp-module`二次开发,不仅具备原模块的所有功能,还支持HTTP-FLV播放、GOP缓存、虚拟主机等功能。安装步骤包括:确认Nginx版本、下载相应版本的Nginx与模块源码、重新编译Nginx并加入新模块、验证模块安装成功。特别注意,此模块已包含`nginx-rtmp-module`功能,无需重复编译安装。
1126 3
|
弹性计算 固态存储 Linux
2024年阿里云服务器租用详细价格表(CPU/内存/带宽/系统盘)
2024阿里云服务器租用优惠价格表,轻量服务器2核2G3M带宽轻量服务器一年61元,2核4G4M带宽轻量服务器一年165元12个月,ECS云服务器e系列2核2G配置、3M固定带宽、40G ESSD Entry云盘,99元一年、2核4G服务器30元3个月、2核4G配置365元一年、2核8G配置522元一年,云服务器u1、云服务器c7、g7和r7优惠价格表,CPU内存带宽系统盘配置详细报价:
5753 3
|
SQL 存储 开发工具
vanna+qwen实现私有模型的SQL转换
本文档介绍了如何在本地部署Vanna服务以使用Qwen模型进行text2sql转换。首先,通过`snapshot_download`下载Qwen-7B-Chat模型,并安装相关依赖。接着,修改`openai_api.py`设置本地LLM服务接口。然后,安装并配置Vanna Flask服务,包括自定义LLM服务、连接数据库以及修改端口。为了解决内网访问问题,使用ngrok或natapp进行内网穿透,提供公网访问。最后,处理了chromadb包中自动下载资源的问题,以防网络不佳导致的失败。通过这些步骤,实现了使用本地Qwen模型的Vanna服务。
11041 9
|
算法
数据结构例程——选择排序之堆排序
本文是[数据结构基础系列(9):排序]中第7课时[选择排序之堆排序]的例程。 对算法运行过程,补充了一个示例,见[补充示例]。 #include <stdio.h> #define MaxSize 20 typedef int KeyType; //定义关键字类型 typedef char InfoType[10]; typedef struct
1383 0