IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 什么!?改BUG最牛的人竟然是一位皇帝!!集合前来觐见! -> 正文阅读

[Java知识库]什么!?改BUG最牛的人竟然是一位皇帝!!集合前来觐见!


目录

前言:

一、Collection:

1、List:

ArrayList:

LinkedList:

2、Set:

HashSet:

TreeSet:

二、Map:

1、HashMap:

2、TreeMap:

三、面试题:


前言:

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

嘿嘿,要说改BUG最牛的人是谁呢?那肯定是雍正帝了,因为雍正专治八阿哥(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;

求关注!

求点赞!

求评论!

?万分感谢!

感谢

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-21 12:03:18  更:2021-10-21 12:04:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:25:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码