前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >集合框架

集合框架

作者头像
端碗吹水
发布2020-09-23 10:31:46
5130
发布2020-09-23 10:31:46
举报
文章被收录于专栏:程序猿的大杂烩

HashSet集合:

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

3ee673302e9f5bd92dd078397547a1bd.png
3ee673302e9f5bd92dd078397547a1bd.png

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

9568ec09accd869efbaa141986875b40.png
9568ec09accd869efbaa141986875b40.png

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

29dcb1761b0f48a56ae8286a8ea6dd3e.png
29dcb1761b0f48a56ae8286a8ea6dd3e.png

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

6803806ccd5529611a9bfe31d83a4a8a.png
6803806ccd5529611a9bfe31d83a4a8a.png

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

9bb92b09b68cd749d7a31634a90e04d9.png
9bb92b09b68cd749d7a31634a90e04d9.png

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

051059a1e7964464b2be2d4793be8983.png
051059a1e7964464b2be2d4793be8983.png

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

daa2a09a8c6e92fc40d59021d7a172ed.png
daa2a09a8c6e92fc40d59021d7a172ed.png

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

2940e3ab1f5db6c0e7d826953b571bf2.png
2940e3ab1f5db6c0e7d826953b571bf2.png

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

caaacc6cb14c93a7163e977b3de98eda.png
caaacc6cb14c93a7163e977b3de98eda.png

运行结果:

c3c3afc00686f332d50c9455b69b6aec.png
c3c3afc00686f332d50c9455b69b6aec.png

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

如果不重写方法:

0e7a28904fcccd3011a93773911e6a18.png
0e7a28904fcccd3011a93773911e6a18.png

运行结果:

585a270f7769334ab3f43a7cf862a6ef.png
585a270f7769334ab3f43a7cf862a6ef.png

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

重写方法:

e5443376d526f93bf13224af3d8df69c.png
e5443376d526f93bf13224af3d8df69c.png
a24c6713c83d61b704e2aadf39470f44.png
a24c6713c83d61b704e2aadf39470f44.png

运行结果:

d7cd3ff080022ea1e761282e8e612fc9.png
d7cd3ff080022ea1e761282e8e612fc9.png

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

Tree集合:

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

Tree结构图:

97073baf65ec0432930a5bd7b1c0dbbb.png
97073baf65ec0432930a5bd7b1c0dbbb.png

代码示例:

345027ffa0083948b3142b571f3ceff8.png
345027ffa0083948b3142b571f3ceff8.png

运行结果:

5f1e4f4c96ee96f915952debfc2373bb.png
5f1e4f4c96ee96f915952debfc2373bb.png

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

ArrayList集合与Vector集合:

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

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

e8488976ece3426a4c8540149c427003.png
e8488976ece3426a4c8540149c427003.png

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

5c96e2a65da9f75e985539742256fb0a.png
5c96e2a65da9f75e985539742256fb0a.png

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

e42979d4d422a01582f1f39cd54f494b.png
e42979d4d422a01582f1f39cd54f494b.png

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

d9483840bbdb97b677585b605bd553f7.png
d9483840bbdb97b677585b605bd553f7.png

remove:按下标删除方法:

1658d4e74e57f696f8bca5df68273b33.png
1658d4e74e57f696f8bca5df68273b33.png

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

0a52589876dfd45feef0042534dc48b6.png
0a52589876dfd45feef0042534dc48b6.png

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

ab415610e0dda76cabe62ee4ab55a07e.png
ab415610e0dda76cabe62ee4ab55a07e.png

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

b67110dbb9f1b142be0138b9133d2db4.png
b67110dbb9f1b142be0138b9133d2db4.png

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

64122f44cf72878575876d8bacf0604f.png
64122f44cf72878575876d8bacf0604f.png

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

e77d6ba31902d7449c01428ed24472b2.png
e77d6ba31902d7449c01428ed24472b2.png

运行结果:

d4fe5ae04e4b72543d705ae95b49b579.png
d4fe5ae04e4b72543d705ae95b49b579.png

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

52135bc5a33602ef04a7a6cf81009b86.png
52135bc5a33602ef04a7a6cf81009b86.png
395ad72882fa22d3f2d3c836f8f80239.png
395ad72882fa22d3f2d3c836f8f80239.png

LikedList集合:

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

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

3da8b36d64193d99e7b1eb35c01ea15e.png
3da8b36d64193d99e7b1eb35c01ea15e.png

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

41cda5bd6dd328c8d047a9524bb3edf4.png
41cda5bd6dd328c8d047a9524bb3edf4.png

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

1010851bfedbf73a49b0543da7c17c25.png
1010851bfedbf73a49b0543da7c17c25.png

使用迭代器遍历LikedList集合:

5d8102c95bee11dfcc3135146557d513.png
5d8102c95bee11dfcc3135146557d513.png

运行结果:

0d4def4c17926300866d427c7cb244c6.png
0d4def4c17926300866d427c7cb244c6.png

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/10/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档