Java集合理论知识和集合面试题

今天就来讲一下面试经常遇到的面试题,List,Set,Queue都继承了Collection接口,而Collection接口继承了Iterable接口,并且Map不需要继承谁,因为它自己就是老大。
先来讲一下继承Collection的集合。

集合关系图

在这里插入图片描述

Iterable接口

实现iterable接口的类可以拥有增强for循环 实现iterable接口的类必须提供iterable()方法,返回值为Iterable类型

Collection接口

Collection是集合类的上级接口,继承与他的接口主要有Set 和List.

List集合

特点:

  1. 值可重复
  2. 有序

遍历方式:

  1. for循环
  2. foreach
  3. 迭代

List接口中包括ArrayList和LinkedList
在这里插入图片描述

Set集合

Set集合中包括HashSet,TreeSet,LinkedHashSet。
特点:

  1. 无序
  2. 不能重复

遍历方式:

  1. 迭代
  2. forech

在这里插入图片描述

Queue集合

队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。

在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将是最后被删除的元素,因此队列又称为“先进先出”(FIFO—first in first out)的线性表
在这里插入图片描述
简单来讲:先进先出

ArrayList和LinkedList区别

(1)如果需要遍历集合,ArrayList通过随机访问的方式比较好,LinkedList通过迭代器的方式比较好;
(2)需要经常执行插入、删除操作时,使用LinkedList比较好,因为他用链表实现,ArrayList内部会扩容动态分配大小,耗费时间;

HashSet,TreeSet,LinkedHashSet的区别

  • HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值相等

  • TreeSet类型是J2SE中唯一可实现自动排序的类型

  • TreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0

  • 使用链表维护元素的次序

  • 当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素

以上是继承Collection的集合,下面我们讲一下Map集合。

Map集合

Map中包括:HashMap,TreeMap,LinkedHaspMap。
特点:
key在Map里面是唯一的但是value可以重复,一个key对应一个value

遍历方式:

  1. 通过keyset二次取值,比较经常使用
  2. 通过entrySet使用迭代器遍历key和value
  3. 通过Map.entrySet遍历key和value(推荐容量大时使用)
  4. 通过Map.values()遍历所有的value,但不能遍历key
    在这里插入图片描述

    HashMap,TreeMap,LinkedHashMap区别


    相同点:

    HashMap,LinkedHashMap,TreeMap都属于集合Map接口的子类。都是键值对集合。线程都不安全,效率高。

    不同点:

    (1)HashMap键是哈希表结构,可以保证键的唯一性,key能null,值也可为null。

(2)LinkedHashMap是HashMap的子类,内部依赖哈希表和链表列实现。由hash保证键的唯一性,由LinkedList保证有序性(存取顺序一致)。key能为null,value也能为null。

(3)TreeMap类,键是红黑树结构,可以保证键的排序(自然排序),并且不能重复。key不能为null,value可以为null

Arrays数组

arrays:是Java中的数组。
arrayList:是动态数组,可以说是arrays的复杂版本。

Array和ArrayList有何区别?什么时候更适合用Array?

Array可以容纳基本类型和对象,而ArrayList只能容纳对象。

Array是指定大小的,而ArrayList大小是固定的。

Array没有提供ArrayList那么多功能,比如addAll、removeAll和iterator等。尽管ArrayList明显是更好的选择,但也有些时候Array比较好用。

(1)如果列表的大小已经指定,大部分情况下是存储和遍历它们。

(2)对于遍历基本数据类型,尽管Collections使用自动装箱来减轻编码任务,在指定大小的基本类型的列表上工作也会变得很慢。

(3)如果你要使用多维数组,使用[][]比List<List<>>更容易。

Collection中的remove方法和Iterable中remove方法区别:
  • Collection的remove方法带参,Iterable反之。
  • Collection中的remove()方法删除的话,是一个一个的去找,找到后,就删除,而Iterable反之。
  • Collection中remove方法删除了它找到的对象或者数据的话,删除完成就会报错,是因为对象或者数据的位置发生变化,后面的对象或者数据就会往前补,比如:下标本应该是为1的,删除之前的元素,而之前下标为1的却变成了0,就会导致程序报错。

大家可以关注下面公众号: 《巧克力酱编程》
有时其他知识会在公众号更新的哦🤞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值