目录

前言:

一、Collection:

1、List:

ArrayList:

LinkedList:

2、Set:

HashSet:

TreeSet:

二、Map:

1、HashMap:

2、TreeMap:

三、面试题:


前言:

岂可休!!之前竟然有人说我标题王不行了。今日我携新标题勇者归来!

嘿嘿,要说改BUG最牛的人是谁呢?那肯定是雍正帝了,因为雍正专治八阿哥(BUG)嘛。

在雍正的兄弟里,八阿哥有“贤王”之称,正是因为“八爷党”的强大,成为了继承大统的胤禛(雍正皇帝)主要打击对象,雍正皇帝宁可背负残害亲兄弟的骂名,也要将其一网打尽。最终也是登上了帝位。

咱们回到正题哈,今天来和大家说一说容器集合。

集合类又被称为容器,是java数据结构的实现,专门用来存储其他类的对象。集合分为单列集合Collection和双列集合Map。希望通过本篇博客能帮助到大家了解它们。

一、Collection:

Collection是单列集合的顶层接口,它表示一组对象,这些对象也称为Collection元素
JDK不提供此接口的直接实现类,它提供更具体的子接口(Set和List)。

因为Collection是接口,所以使用它的时候需要通过多态形式创建对象。

常用方法:

方法名 说明
boolean add(E e) 添加元素
boolean remove(Object o) 从集合中移除指定的元素
void clear() 清空集合中的元素
boolean contains(Object o) 判断集合中是否存在指定的元素
boolean isEmpty() 判断集合是否为空
int size() 集合的长度,也就是集合中元素的个数

遍历:

1.通过集合对象获取迭代器对象。

2.使用循环和 hasNext()方法来控制是否还有元素。

3.循环内通过next()方法获取元素。

Collection分为List、Set和Queue(队列),这个队列我们只要知道一下就好了,不需要过多的关注,主要是List和Set

1、List:

特点:   

1.有索引

2.可以存储重复元素

3.元素存取有序

List集合的实现类主要有三个,分别是ArrayListLinkedList和Vector,其中Vector我们只要了解到它和ArrayList相比较,它是线程安全的,有一个我们很熟悉的类继承于它,就是Stack(栈)。

ArrayList:

底层实现:数组

特点:查询快,增删慢。

LinkedList:

底层实现:链表

特点:查询慢,增删快。

它允许有空(null)元素。

特有功能:

方法名 说明
public void addFirst(E e) 在该列表开头插入指定的元素
public void addLast(E e) 将指定的元素追加到此列表的末尾
public E getFirst() 返回此列表中的第一个元素
public E getLast() 返回此列表中的最后一个元素
public E removeFirst() 从此列表中删除并返回第一个元素
public E removeLast() 从此列表中删除并返回最后一个元素

2、Set:

Set的实现类主要是HashSet和TreeSet。

HashSet:

底层实现:哈希表结构

特点:

1.底层是哈希表结构

2.元素存取无序

3.没有索引

4.不能存储重复元素

允许包含值为null的元素,但最多只能一个。

其中LinkedHashSet不同于LinkedList和ArrayList同属于List实现类,LinkedHashSet是HashSet的子类。

LinkedHashSet:

底层实现:哈希表和链表

特点:

1.具有可预测的迭代次序。

2.由链表保证元素有序,也就是说元素的存储和取出顺序是一致的。

3.由哈希表保证元素唯一,也就是说没有重复的元素。

TreeSet:

底层实现:红黑树

特点:

1.元素有序。元素可以按照一定规则进行排序。具体要取决于构造方法。
                        TreeSet():根据元素的自然顺序进行排序。
                        TreeSet(Comparator c):根据指定的比较器进行排序。

2.TreeSet集合没有索引。只能通过迭代器、增强for循环进行遍历。

3.TreeSet集合不能存储重复元素。

自然排序Comparable的使用:

1.用TreeSet集合存储自定义对象,无参构造方法使用的是自然排序对元素进行排序的。

2.自然排序,就是让元素所属的类实现Comparable接口,重写compareTo(T o)方法。

3.重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写。

比较器排序Comparator的使用:

1.用TreeSet集合存储自定义对象,带参构造方法使用的是比较器排序对元素进行排序的。

2.比较器排序,就是让集合构造方法接收Comparator的实现类对象,使用匿名内部类方式传递,重写compare(T o1,T o2)方法。

3.重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写。

二、Map:

Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象。它主要有HashMap和TreeMap、Hashtable,也是了解Hashtable是线程安全的就好。

基本功能:

方法名 说明
V put(K key,V value) 添加元素
V remove(Object key) 根据键删除键值对元素
void clear() 移除所有的键值对元素
boolean containsKey(Object key) 判断集合是否包含指定的键
boolean containsValue(Object value) 判断集合是否包含指定的值
boolean isEmpty() 判断集合是否为空
int size() 集合的长度,也就是集合中键值对的个数

获取功能:

方法名 说明
V get(Object key) 根据键获取值
Set<K> keySet() 获取所有键的集合
Collection<V> values() 获取所有值的集合
Set<Map.Entry<K,V>> entrySet() 获取所有键值对对象的集合

其中我们通过KeySet方法获得所有键的集合为Set,加上键又是不能重复的。那么我们可以认为Map的键列底层实现是数列加上链表。而vakues方法获得所有值的集合为Collection,底层实现为链表或者数列。

特点:

1.键值对映射关系。

2. 一个键对应一个值。

3.键不能重复,值可以重复。

4.元素存取无序。

遍历:

方式1(键找值):

1.获取所有键的集合。用keySet()方法实现。

2.遍历键的集合,获取到每一个键。用增强for实现 。

3.根据键去找值。用get(Object key)方法实现。

方式2(键值对对象找值):

1.获取所有键值对对象的集合,使用entrySet()实现。

2.遍历键值对对象集合,拿到每一个键值对对象。

3.调用键值对对象中的getKey()和getValue()方法获取键和值。

1、HashMap:

JDK1.8 之前 HashMap的底层实现是数组加链表。

JDK1.8之后。当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间,所以底层实现是数组加链表加红黑树。

它具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步。

2、TreeMap:

TreeMap底层实现:红黑树

特点:

1.无序,不允许重复(无序指元素顺序与添加顺序不一致)。

2.TreeMap集合默认会对键进行排序,所以键必须实现自然排序和定制排序中的一种。

三、面试题:

1、常见的集合有哪些?

Map接口和Collection接口是所有集合框架的父接口
Collection接口的子接口包括:Set接口和List接口
Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等
Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等
List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等

2、Arraylist 与 LinkedList 异同

  • 1. 是否保证线程安全 ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全;
  • 2. 底层数据结构: Arraylist 底层使用的是Object数组;LinkedList 底层使用的是双向循环链表数据结构;
  • 3. 插入和删除是否受元素位置的影响: ① ArrayList 采用数组存储,所以插入和删除元素的时间复杂度受元素位置的影响。 ② LinkedList 采用链表存储,所以插入,删除元素时间复杂度不受元素位置的影响,都是近似 O(1)而数组为近似 O(n)。
  • 4. 是否支持快速随机访问: LinkedList 不支持高效的随机元素访问,而ArrayList 实现了RandmoAccess 接口,所以有随机访问功能。快速随机访问就是通过元素的序号快速获取元素对象(对应于get(int index)方法)。
  • 5. 内存空间占用: ArrayList的空 间浪费主要体现在在list列表的结尾会预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗比ArrayList更多的空间(因为要存放直接后继和直接前驱以及数据)。

3、ArrayList和LinkedList的区别?

  • LinkedList基于链表的数据结构;ArrayList基于动态数组的数据结构
  • LinkedList 在插入和删除数据时效率更高,ArrayList 查询效率更高;

4、HashMap与HashTable的区别?

  1. HashMap没有考虑同步,是线程不安全的;Hashtable使用了synchronized关键字,是线程安全的;
  2. HashMap允许K/V都为null;后者K/V都不允许为null;

求关注!

求点赞!

求评论!

万分感谢!

什么!?改BUG最牛的人竟然是一位皇帝!!集合前来觐见!相关推荐

  1. 这位 50 岁的海归程序员,当着老板还在天天改 Bug

    50 岁还在写代码!经常被自己的下属安排改Bug,还改得美滋滋!一家人都爱编程,太太和儿子都是程序员! 好不容易在美国扎住脚,竟因耐不住安逸,卖掉房子回国从0开始创业!三次创业两次成功.最后一次还在路 ...

  2. 几年前的项目用了YYYY-MM-dd,跨年夜老板喊我回去改Bug

    点击上方"码农进阶之路",选择"设为星标" 回复"面经"获取面试资料 昨天听一粉丝讲到自己的项目中因为格式化时间用到了"YYYY- ...

  3. OSChina 周一乱弹 ——周末就在家改Bug么

    2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2017)请戳(这里) [今日歌曲] @喝酒不抽烟 :一天20万微博数据,那就这样吧.分享Rocky的单曲&l ...

  4. 程序员老在改Bug,就不能一次改好吗?

    作者丨伍杏玲 来源 | 程序人生(ID:coder_life) 程序员的日常三件事:写Bug.改Bug.背锅.连程序员都自我调侃道,为什么每天都在加班?因为我的眼里常含Bug. 但是真的有这么多Bug ...

  5. 程序员失业第一步?斯坦福研究员用AI从编译器反馈中学习改Bug

    来源:AI科技评论 本文约2700字,建议阅读10分钟 本文介绍了来自斯坦福大学的两位研究员研究了如何使用AI来自动修复程序,以期未来程序修复自动化可以大大提高编程和学习编程的效率. 众所周知,程序员 ...

  6. 名企程序员被裁实录:早上还在改 Bug,晚上就成下岗工

    戳蓝字"CSDN云计算"关注我们哦! 尽管最近新闻铺天盖地的"寒冬说",由于我多年身处在稳定的大公司里,并没有太多的危机感.昨天大伙一起讨论年会表演什么节目,你 ...

  7. 为什么程序员老在改 Bug,就不能一次改好吗?

    程序员的日常三件事:写Bug.改Bug.背锅.连程序员都自我调侃道,为什么每天都在加班?因为我的眼里常含Bug. 但是真的有这么多Bug要改吗?就不能一次改完吗? 程序员听这问题后要拍键盘了,还!真! ...

  8. 比你拼命的人多的是,最可怕的是比你牛的人比你还拼命(每天看一段一个月刚刚好)

    给力吧  比你拼命的人多的是  最可怕的是比你牛的人比你还拼命 1.读医学院的,曾经在一个上10门专业课的学期里,同时考了GRE,新TOEFL,再加上平时的上课&见习.  话说医学院是没有选课 ...

  9. 比你拼命的人多的是,最可怕的是比你牛的人比你还拼命。。。励志

    比你拼命的人多的是 最可怕的是比你牛的人比你还拼命 1.读医学院的,曾经在一个上10门专业课的学期里,同时考了GRE,新TOEFL,再加上平时的上课&见习. 话说医学院是没有选课的,学校按照你 ...

最新文章

  1. python with上下文管理
  2. 【直播回放】60分钟剖析GAN如何用于人脸的各种算法
  3. 一台古老电脑之维修记
  4. 硬件模块化开发的例子:LD3320语音模块与Source Insight的使用
  5. C语言 | 为什么写这三行代码
  6. java大作业私人管家系统_重庆管家婆软件丨管家婆工贸PRO的E-MES管理详解
  7. Promise使用,return的运用,解决回调地狱
  8. JSP — 知识总结篇《I》【基础语法】
  9. Promise.all和Promise.race区别,和使用场景
  10. php兼容net的md5,解决c# md5与php md5加密不一致的问题(md5(unicode))
  11. C语言练习——数据加密
  12. 一个电商网站设计方案
  13. 【数学逻辑思维】好玩的数独游戏(高难度版)——003
  14. 笔记本电脑没有wifi图标导致没有网
  15. pytorch基于GAN生成对抗网络的数据集扩充
  16. 短网址短链接哪个好用?2021年最好的缩短链接短网址推荐
  17. 将电脑通达信条件预警同步到手机
  18. 微信小程序----使用微信内置地图查看位置wx.openLocation(Object object)
  19. C++-Cmake指令:link_directories【指定第三方库所在路径】【官方不建议使用该命令,取而代之的为find_package()、find_library()】
  20. 易语言晨风机器人源_易语言FQ自动聊天机器人源码,易语言自动聊天插件制作源码...

热门文章

  1. 哈希存储、哈希表原理
  2. QQ账户的申请与登录
  3. 2022.03.23绝世武功
  4. iOS开发——使用Charles进行https网络抓包详解
  5. 2021年--中国工商银行软件开发中心--社会招聘(春季)
  6. spark-streaming统计各岗位招聘信息行数
  7. DolphiScheduler平台上运行spark程序时,外部参数设置
  8. C语言试题151之求 0到7 所能组成的奇数个数。
  9. 浅析互联网产品设计中的色彩心理学
  10. 餐厅食材采购信息管理系统的设计与实现