Java基础知识点总结系列(十)——集合及其常用方法_java集合总结

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

概述

Java中集合整体上分为两大类:Collections和Map

一、Collection

Collection是一个接口,他没法直接进行实现,它定义了集合类一些公有的方法,比较常用的方法包括:
① int size(); 返回集合汇总元素的数量(集合的大小);
② boolean isEmpty(); 返回集合是否为空,true表示空;
③ boolean contains(Object o); 返回集合中是否包含特定的对象o,为true表示包含;
④ Iterator iterator(); 返回遍历容器的迭代器;
⑤ boolean add(E e); 往集合中添加一个元素,如果集合中已存在该元素且该集合不允许重复则返回false,反之返回true;
⑥ boolean remove(Object o); 从集合中移除指定的元素;
⑦ boolean containsAll(Collection<?> c); 返回集合是否包含指定集合c中全部元素,全部包含返回true,其他情况返回false;
⑧ void clear(); 清空集合;

Collection有三个子接口,分别是List,Set,Queen

1. List

List是一种允许重复元素、有序的接口,相比于其父类Collection接口,List接口添加了面向位置的操作。提供了可以在指定位置进行插入以及删除的功能。其有两个实现类,LinkedList和ArrayList。由于List内部元素是存在顺序的,所以List允许出现重复元素(这也是List和Set的主要区别)。

1.1 ArrayList

以数组形式进行存储的List,因为以数组形式存储,所以其查询元素的空间复杂度为O(1),但在插入和删除时,需要将其他所有元素依次进行平移。ArrayList不支持同步,再多线程场景下使用ArrayList必须自己做同步。

1.2 LinkedList

以链表形式对数据进行存储,其插入和删除的时间复杂度为O(1),因为只需要修改前后元素指向即可,但LinkedList查找效率相对较低,最坏情况下需要遍历整个LinkedList,所以其时间复杂度为O(1)。LinkedList也不支持同步,多线程操作时也需要和ArrayList一样单独做同步,同时LinkedList还支持在头部插入删除以及在尾部插入删除,所以可以通过链表实现堆栈和队列。

2. Set接口

Set是一种不包含重复元素的接口,其内部是无序的(当然从hashcode的角度来看可是看做是有序的),元素值可以为null(因为元素不能重复,所以null最多只有一个);

2.3 HashSet

HashSet其实就是一种不允许重复的集合,因为HashMap不允许key重复,HashSet本质上就是一个HashMap的key集合,对应的value为一个new出来的Object,实际上,HashSet并不关心value,他需要的就是利用HashMapkey不重复的特点实现元素不重复。这样就实现了一种元素不重复的集合。其内部的add()/remove()方法都是直接调用的HashMap中的方法。

private transient HashMap<E,Object> map;

// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();


![img](https://img-blog.csdnimg.cn/img_convert/dd2fdda5e6e2db6590c47b0ddf6d11c8.png)
![img](https://img-blog.csdnimg.cn/img_convert/b82301b9f8d5f04cf9182fbe31b3a030.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值