博瑞思信息面试

1、java中的基本数据类型

2.接口和抽象类有什么区别

抽象类是对类的抽象(是什么),接口是对行为的抽象(做什么)。

如果行为跨越不同类的对象,可使用接口,对于一些现实的类对象,用继承抽象类。

抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类,而接口是根本不知道子类的存在,方法如何实现还不确认,预先定义。

如果就是某种玩意,比如人相对于男人,小孩,女人,那么就应该是抽象类,因为他们都是人,有人所有的特点。接口相对于人,汽车,飞机就是,那么就是接口,因为他们有这样的功能,但不具有的抽象特征。
区别
(1) 抽象类中可以有构造方法 接口中不能含有构造方法。
(2) 抽象类中可以有实例方法,接口中的方法都是抽象方法。
(3) 抽象类中可以定义常量 也可以定义变量,接口中只有常量。
(4) 一个只能继承一个父类,但是可以实现多个接口。
(5) 定义抽象类使用的是abstract 定义接口使用的是interface关键字。

3、Java中的自动装箱与拆箱

装箱就是自动将基本数据类型转换为包装器类型,让基本数据类型也具有对象的特征。如我们在使用集合类型Collection时就一定要使用包装类型而非基本类型)因为容器都是装object的,这是就需要这些基本类型的包装器类了。

区别

声明方式不同:基本类型不使用new关键字,而包装类型需要使用new关键字来在堆中分配存储空 间。

存储方式及位置不同:基本类型是直接将变量值存储在栈中,而包装类型是将对象放在堆中,然后 通过引用来使用。

初始值不同:基本类型的初始值如int为0,boolean为false,而包装类型的初始值为null;

使用方式不同:基本类型直接赋值直接使用就好,而包装类型在集合如Collection、Map时会使用到。

4、hashMap

说到容器,你肯定会想到 Java中对象存储容器还有ArrayListLinkedListHashSet等,HashMap 相对这些容器来说,可以理解为多了一层指向关系,可以用指定Key找到指定Value。

这个时候你必须要想到,如果两个人名字一样可咋办,查到的到底是谁的信息呢?前者信息会被覆盖吗?带着问题来学习一下HashMap数据结构及其工作原理。

2.2 工作原理
首先,初始化 HashMap,提供了有参构造和无参构造,无参构造中,容器默认的数组大小 initialCapacity 为 16,加载因子loadFactor 为0.75。容器的阈(yu)值为 initialCapacity * loadFactor,默认情况下阈值为 16 * 0.75 = 12; 后面会讲到阈值有啥用。

然后,这里我们拿 PUT 方法来做研究:

第一步:通过 HashMap 自己提供的hash 算法算出当前 key 的hash 值

第二步:通过计算出的hash 值去调用 indexFor 方法计算当前对象应该存储在数组的几号位置

第三步:判断size 是否已经达到了当前阈值,如果没有,继续;如果已经达到阈值,则先进行数组扩容,将数组长度扩容为原来的2倍。

> 请注意:size 是当前容器中已有 Entry 的数量,不是数组长度。

第四步:将当前对应的 hash,key,value封装成一个 Entry,去数组中查找当前位置有没有元素,如果没有,放在这个位置上;如果此位置上已经存在链表,那么遍历链表,如果链表上某个节点的 key 与当前key 进行 equals 比较后结果为 true,则把原来节点上的value 返回,将当前新的 value替换掉原来的value,如果遍历完链表,没有找到key 与当前 key equals为 true的,就把刚才封装的新的 Entry中next 指向当前链表的始节点,也就是说当前节点现在在链表的第一个位置,简单来说即,先来的往后退。

OK!现在,我们已经将当前的 key-value 存储到了容器中。

4、java中的集合框架

集合框架:用于存储数据的容器

集合框架是为表示和操作集合而规定的一种统一的标准的体系结构
任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法

接口:表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现,从而达到“多态”。在面向对象编程语言中,接口通常用来形成规范

实现:集合接口的具体实现,是重用性很高的数据结构

算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查找、排序等。这些算法通常是多态的,因为相同的方法可以在同一个接口被多个类实现时有不同的表现。事实上,算法是可复用的函数。

集合框架通过提供有用的数据结构和算法使你能集中注意力于你的程序的重要部分上,而不是为了让程序能正常运转而将注意力于低层设计上。
通过这些在无关API之间的简易的互用性,使你免除了为改编对象或转换代码以便联合这些API而去写大量的代码。 它提高了程序速度和质量。

特点

  • 对象封装数据,对象多了也需要存储。集合用于存储对象。

  • 对象的个数确定可以使用数组,对象的个数不确定的可以用集合。因为集合是可变长度的。

集合和数组的区别

  • 数组是固定长度的;集合可变长度的。

  • 数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。

  • 数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。

使用集合框架的好处

  1. 容量自增长;
  2. 提供了高性能的数据结构和算法,使编码更轻松,提高了程序速度和质量;
  3. 允许不同 API 之间的互操作,API之间可以来回传递集合;
  4. 可以方便地扩展或改写集合,提高代码复用性和可操作性。
  5. 通过使用JDK自带的集合类,可以降低代码维护和学习新API成本。

主要根据集合的特点来选用,比如我们需要根据键值获取到元素值时就选用Map接口下的集合,需要排序时选择TreeMap,不需要排序时就选择HashMap,需要保证线程安全就选用ConcurrentHashMap.当我们只需要存放元素值时,就选择实现Collection接口的集合,需要保证元素唯一时选择实现Set接口的集合比如TreeSet或HashSet,不需要就选择实现List接口的比如ArrayList或LinkedList,然后再根据实现这些接口的集合的特点来选用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值