1、Q:ArrayList 和 LinkedList 有什么区别?

A:ArrayList查询快!LinkedList增删快。ArrayList是基于索引的数据接口,它的底层是数组。空间占用相对小一些

     LinkedList是链表结构,LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。

     对于查询速度,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 对于插入或移除操作,LinedList比较占优势,因为ArrayList要移动数据(只限于在中间插入或移除,在末尾插入或移除效率是一样,

   还有可能ArrayList效率更高)。ArrayList和LinkedList中的操作都是线程不安全的!所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOnWriteArrayList。Vector的底层是向量数组,其实和ArrayList差不多。

2、Q:list,map,set的对比。

   A:Set和List有一个共同的父类,就是Collection,Set中不能包含重复的元素,内部是无序的,List中可以包含重复数据,内部是有序的,可以直接通过角标来获取对应的值。

    Map为独立接口,Set下有HashSet,LinkedHashSet,TreeSet;List下有ArrayList,Vector,LinkedList;Map下有Hashtable,LinkedHashMap,HashMap,TreeMap。

3、Q:String和StringBuilder、StringBuffer的区别

   A:先别着急说String是不可变的,StringBuffer是可变的,我们先来看一段代码。

public static void main(String[] args) {
String a = "A1";
System.out.println(a);
a = a + "2";
System.out.println(a);
}

该代码没有编译错误,运行也是没有错误的。我稍后为你解答,我们为什么总说String是不可变的。

  这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。

  运行速度:在这方面运行速度快慢为:StringBuilder > StringBuffer > String

  我们来看一下为什么String为什么会慢,String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。

这下自相矛盾了,刚才还说可变,这次又说不可变,我们来具体看一下代码和原因。如果运行这段代码会发现先输出“A1”,然后又输出“A12”,好像是a这个对象被更改了,其实,这只是一种假象罢了,JVM对于这几行代码是这样处理的,首先创建一个String对象a,并把“A1”赋值给对象a,然后在第三行中,其实JVM又创建了一个新的对象也名为a,然后再把原来的a的值和“2”加起来再赋值给新的对象a,而原来的a就会被JVM的垃圾回收机制(GC)给回收掉了,所以,a实际上并没有被更改,也就是前面说的String对象一旦创建之后就不可更改了。所以,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。

  再从线程安全的角度来说:如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。

  总结一下String:适用于少量的字符串操作的情况,StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况,StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

4、Q: '==' 和 'equals' 的区别

   A:对于基础数据类型,使用“=="比较值是否相等;

    复合数据类型,当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。

    对于equals方法,注意:equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否是同一个对象

    如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

    诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

5、Q:Java Error和Exception区别

   A:Error和Exception都继承自Throwable;

    二者不同之处:

    Exception:

    1.可以是可被控制(checked)或者不可控制(unchecked);

    2.表示一个由程序员导致的错误;

3.应该在应用程序级被处理;

   Error:

1.总是不可控制的(unchecked);

2.经常用来表示系统错误或者底层资源错误;

3.如果可能的话,应该在系统级被捕捉;

    java 中定义了两类异常:

1) Checked exception: 这类异常都是Exception的子类 。异常的向上抛出机制进行处理,假如子类可能产生A异常,那么在父类中也必须throws A异常。可能导致的问题:代码效率低,耦合度过高。

2) Unchecked exception: 这类异常都是RuntimeException的子类,虽然RuntimeException同样也是Exception的子类,但是它们是非凡的,它们不能通过client code来试图解决,所以称为Unchecked exception 。

java面试基础篇(三)的更多相关文章

  1. java面试基础篇(一)

    最近想深入的理解一下java 的工作机制,也是便于后期的面试. 1.A:HashMap和Hashtable有什么区别? Q:HashMap和Hashtable都实现了Map接口,因此很多特性非常相似. ...

  2. java面试基础篇(二)

    上一篇,我们说了一下线程和Map,或许那些太抽象,不太好理解,也不太方便记忆,我们这次说一些简单的. 1.Q:java的基本数据类型有哪些? A:四种整数类型(byte.short.int.long) ...

  3. java面试基础篇-List

    一.ArrayList: 底层为数组实现,线程不安全,查询,修改快,增加删除慢, 数据结构:数组以0为下标依次连续进行存储 数组查询元素:根据下标查询就行 数组增加元素:如果需要给index为10的位 ...

  4. 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制

    你所不知道的库存超限做法 在互联网企业中,限购的做法,多种多样,有的别出心裁,有的因循守旧,但是种种做法皆想达到的目的,无外乎几种,商品卖的完,系统抗的住,库存不超限.虽然短短数语,却有着说不完,道不 ...

  5. Java面试集合(三)

    前言 大家好,给大家带来Java面试集合(三)的概述,希望你们喜欢 三 1.在Java中是否可以含有多个类? 答:可以含有多个类,但只有一个是public类,public类的类名与文件名必须一致. 2 ...

  6. Java面试集合(三)-30道面试题

    前言 大家好,我是 Vic,今天给大家带来Java面试集合(三)的概述,希望你们喜欢 三 1.在Java中是否可以含有多个类?答:可以含有多个类,但只有一个是public类,public类的类名与文件 ...

  7. Java语言基础(三)

    Java语言基础(三) 一.    补码 (1).之所以有补码是因为要考虑成本 就是造计算机的成本 (2).下面让我们分析一下补码 以四位补码为例 <1> 高位是符号位,它决定其是正数还是 ...

  8. Java 多线程基础(三) start() 和 run()

    Java 多线程基础(三) start() 和 run() 通过之前的学习可以看到,创建多线程过程中,最常用的便是 Thread 类中的 start() 方法和线程类的 run() 方法.两个方法都包 ...

  9. Java 面试知识点解析(三)——JVM篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

随机推荐

  1. js微信摇一摇功能以及api

    一.摇一摇功能 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  2. IT兄弟连 JavaWeb教程 Servlet会话跟踪 Session优缺点

    ●  数据存储在服务器,安全. ●  session能保存Object类型数据,也就是说能存储任意数据. ●  可存储的数据大小,理论上是无限制的. ●  因为数据存储在服务器端,当用户比较多时,会占 ...

  3. Springboot整合elasticSearch的官方API实例

    前言:在上一篇博客中,我介绍了从零开始安装ElasticSearch,es是可以理解为一个操作数据的中间件,可以把它作为数据的存储仓库来对待,它具备强大的吞吐能力和计算能力,其基于Lucene服务器开 ...

  4. 【NOI广东省选模拟赛】割

    [问题描述] 给出 n 个数 a1,a2,...,an, 询问有多少个三元组(i, j, k)满足以下两个条件:1. i < j < k: 2. ai*aj*ak 是 p 的倍数. [输入 ...

  5. MySQL中group by 与 order by 一起使用排序问题

    假设有一个表:reward(奖励表),表结构如下: CREATE TABLE test.reward ( id ) NOT NULL AUTO_INCREMENT, uid ) NOT NULL CO ...

  6. 解决nginx负载均衡高可用keepalived只针对物理机的问题

    在高可用keepalived软件,在默认的情况下仅仅在对方机器宕机或keepalived停掉的时候才会接管业务. 但是在实际工作过程中,例如在nginx负载均衡工作实例中,nginx服务已停止,而ke ...

  7. SpringBoot | Velocity template

    SpringBoot版本: <parent> <groupId>org.springframework.boot</groupId> <artifactId& ...

  8. GYM 101673E(暴搜预处理)

    1.不会超过500个不同的串-- 2.样例没给has到has是怎么样的,实测是true. 3.记忆化别剪错枝就好,嘤嘤嘤-- const int maxn = 505 + 5; int n, m, t ...

  9. bryce1010专题训练——LCA

    1.Targan算法(离线) http://poj.org/problem?id=1470 /*伪代码 Tarjan(u)//marge和find为并查集合并函数和查找函数 { for each(u, ...

  10. 排序算法(C语言+Python版)宝宝再也不怕面试官写排序算法了

    直接插入排序 过程: 1. 数据可分看成两个部分,前面的数据是有序的 2. 从后面的数据取出一个元素,插到前面有序数据的合适位置 从右端开始查找,到找到比此元素大的时候,则此元素向后移动,以空出多余的 ...