行测 软件测试工程师 学生排队 android教程 TensorRT webserver azure sorting build EaselJS jScrollPane bootstrap后台模板 web前端开发实战项目 jquery去空格 hadoop源码 打印缩放怎么设置 java数据分析 不用u盘装双系统 linux查看jdk安装路径 html下拉框默认选中 oracle时间格式化 python加法 python条件判断 python中的if语句 java时间戳转时间 java循环list java创建对象 linuxshell编程 php入门例子 tar文件怎么打开 html5网页制作 pr放大画面 php随机数 红米3和红米3s的区别 暴力猴 预测未来长相的软件 谷歌浏览器xp版下载 微信骰子控制 樱牛在哪 只狼钟
当前位置: 首页 > 学习教程  > 编程语言

大数据面试考点之java集合总结

2020/12/5 10:20:46 文章标签:

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、java集合概述二、Collection接口2.1List接口2.1ArrayList集合2.2LinkedList集合3.set接口3.1 HashSet类哈希表内部存储机制靠元素重写hashCode方法和equals方…

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、java集合概述
  • 二、Collection接口
    • 2.1List接口
    • 2.1ArrayList集合
    • 2.2LinkedList集合
    • 3.set接口
    • 3.1 HashSet类
    • 哈希表
    • 内部存储机制
    • 靠元素重写hashCode方法和equals方法来判断两个元素是否相等,如果相等则覆盖原来的元素,依此来确保元素的唯一性
    • 3.2 TreeSet类
    • 内部存储机制
  • 四.Map集合
    • 4.1HashMap类
    • 4.2 Hashtable介绍


前言

这一段时间一直在学习大数据相关技术栈,对于Java确实有些忽略,面试中频繁问到java一些相关知识,所以最近决定多写几篇面试中会被常问到java相关知识点。


提示:以下是本篇文章正文内容,下面案例可供参考

一、java集合概述

Java中的结合就像一个容器,专门用来存储Java对象(实际上是对象的引用,但习惯称为对象),这些对象可以是任意的数据类型,并且长度可变。其中,这些集合类都位于java.util包中,在使用时一定要注意导包的问题,否则就会出现异常。
集合按照其存储结构可以分为两大类,即单列集合Collection和双列集合Map,这两种集合的特点具体如下:
Collection:单列集合的根接口,用于存储一系列符合某种规则的元素。Collection集合有两个重要的子接口,分别是List和Set。其中,List集合的特点是元素有序、可重复;Set集合的特点是元素无序并且不可重复。List接口的主要实现类有ArrayList和LinkedList;Set接口的主要实现类有HashSet和TreeSet。
Map:双列集合的根接口,用于存储具有键(Key)、值(Values)映射关系的元素。Map集合中每个元素都包含一对键值,并且Key是唯一的,在使用Map集合时可以通过制定的Key找到对应的Value。例如根据一个学生的学号就可以找到对应的学生。Map接口的主要实现类有HashMap和TreeMap。

在这里插入图片描述

二、Collection接口

Collection是所有单列集合的根接口,因此在Collection中定义了单列集合(List和Set)的一些通用方法。

2.1List接口

定义:List接口继承自Collection接口,是单列集合的一个重要分支,习惯性的会将实现了List接口的对象称为List集合。
特点:
List集合中允许出现重复元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引(类似于数组中的元素角标)来访问集合中的元素。
List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。

2.1ArrayList集合

ArrayList是List接口的一个实现类,它是程序中最常见的一种集合。
ArrayList内部的数据存储结构是数组形式。

特点:

由于ArrayList的存储结构,在增加或删除指定位置的元素时,会创建新的数组,效率比较低,因此不适合做大量的增删操作。
这种数组结构允许程序通过索引的方式来访问元素,使用ArrayList集合在遍历和查找元素时显得非常高效。

2.2LinkedList集合

说明:
LinkedList是List接口的另一个实现类。
LinkedList内部包含有两个Node类型的first和last属性的双向循环链表结构。
特点:

由于LinkedList的存储结构, LinkedList集合对于元素的遍历和查找效率较低。
LinkedList集合对于元素的增删操作表现出很高的效率。

3.set接口

Set集合类似于一个罐子,程序可以依次把多个对象“丢进”Set集合,而Set集合通常不能记住元素的添加顺序。实际上Set就是Collection只是行为略有不同(Set不允许包含重复元素)。
Set集合不允许包含相同的元素,如果试图把两个相同元素加入同一个Set集合中,则添加操作失败,add()方法返回false,且新元素不会被加入。

3.1 HashSet类

HashSet是Set接口的典型实现,大多数时候使用Set集合时就是使用这个实现类。HashSet按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能。底层数据结构是哈希表。

哈希表

一个元素为链表的数组,综合了数组与链表的优点。

HashSet具有以下特点:
不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也可能发生变化;
HashSet不是同步的;
集合元素值可以是null;

内部存储机制

当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode方法来得到该对象的hashCode值,然后根据该hashCode值决定该对象在HashSet中的存储位置。如果有两个元素通过equals方法比较true,但它们的hashCode方法返回的值不相等,HashSet将会把它们存储在不同位置,依然可以添加成功。
也就是说。HashSet集合判断两个元素的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode方法返回值也相等。

靠元素重写hashCode方法和equals方法来判断两个元素是否相等,如果相等则覆盖原来的元素,依此来确保元素的唯一性

3.2 TreeSet类

TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态。

内部存储机制

TreeSet内部实现的是红黑树,默认整形排序为从小到大。

四.Map集合

Map接口是一种双列集合,它的每个元素都包含一个键对象Key和值对象Value,键和值对象之间存在一种对应关系,称为映射。从Map集合中访问元素时,只要指定了Key,就能找到对应的Value,
Map中的键必须是唯一的,不能重复,如果存储了相同的键,后存储的值会覆盖原有的值,简而言之就是键相同,值覆盖。

4.1HashMap类

HashMap底层是数组+链表的形式,实现Map.Entry接口,数组是Entry[]数组,是一个静态内部类,Entry是key-value键值对,持有一个指向下一个元素的next引用,这就构成链表(单向链表)。
  HashMap底层是数组和链表的结合体。底层是一个线性数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。数组是Entry[]数组,静态内部类。Entry就是数组中的元素,每个 Map.Entry 其实就是一个key-value对,它持有一个指向下一个元素的引用next,这就构成了链表。根据指定的hash值找到在table中的索引;HashMap底层数组的长度是2^n,默认是16,负载因子为0.75,所以最大容量阈值threshold = (int)(capacity * loadFactor);16*0.75=12,当超过这个阈值的时候,开始扩容,即每次扩容增加一倍。

4.2 Hashtable介绍

Hashtable是和HashMap一样,属于Map典型的实现类,区别于HashMap的是,Hashtable是线程安全的Map实现,但是性能低。Hashtable不允许使用null作为key和value;若将null值存入Hashtable,会抛出NullPointerException异常;而HashMap可以使用null作为key或value。


本文链接: http://www.dtmao.cc/news_show_450203.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?