1. List 和 Set 区别
List 特点:元素有放入顺序,元素可重复
Set 特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉
2. List 和 Map 区别
List 是对象集合,允许对象重复。
Map 是键值对的集合,不允许 key 重复
3. ArrayList 与 Vector 区别
ArrayList 和 Vector 都是用数组实现的,主要有三个区别:
- Vector 是多线程安全的,线程安全就是说多线程访问同一代码,不会产生不
确定的结果。而 ArrayList 不是,这个可以从源码中看出,Vector 类中的方法很多
有 synchronized 进行修饰,这样就导致了 Vector 在效率上无法与 ArrayList 相比;
两个都是采用的线性连续空间存储元素,但是当空间不足的时候,两个类的
增加方式是不同。
- Vector 可以设置增长因子,而 ArrayList 不可以。
- Vector 是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用。
4. Arraylist 与 LinkedList 区别
Arraylist:
优点:ArrayList 是实现了基于动态数组的数据结构,因为地址连续,一旦数据
存储好了,查询操作效率会比较高(在内存里是连着放的)。
缺点:因为地址连续, ArrayList 要移动数据,所以插入和删除操作效率比较
低。
LinkedList:
优点:LinkedList 基于链表的数据结构,地址是任意的,所以在开辟内存空间
的时候不需要等一个连续的地址,对于新增和删除操作 add 和 remove,LinedList
比较占优势。LinkedList 适用于要头尾操作或插入指定位置的场景
缺点:因为 LinkedList 要移动指针,所以查询操作性能比较低。
5. HashMap 和 Hashtable 的区别
1.hashMap 去掉了 HashTable 的 contains 方法,但是加上了 containsValue
()和 containsKey()方法。
2.hashTable 同步的,而 HashMap 是非同步的,效率上逼 hashTable 要高。
3.hashMap 允许空键值,而 hashTable 不允许。
6. 创建线程的方式及实现
一、继承 Thread 类创建线程类
二、通过 Runnable 接口创建线程类
三、通过 Callable 和 Future 创建线程
7. 访问权限修饰符 以及区别
修饰符 当前类 同包 子类 其他包
public √ √ √ √
protected √ √ √ ×
default √ √ × ×
private √ × × ×
8. 是否可以继承 String
String 类是 final 类,不可以被继承。
9. 重载(overload)和重写(override)的区别?
方法重载是指同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即参数的数量或参数类型不能完全相同
方法重写是存在子父类之间的,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数和相同的返回类型
注:
(1)子类中不能重写父类中的final方法
(2)子类中必须重写父类中的abstract方法
10.抽象类(abstract+ class)和接口(interface)有什么异同?
不同:
抽象类:
1.抽象类中可以定义构造器
2.可以有抽象方法和具体方法
3.接口中的成员全都是 public 的
4.抽象类中可以定义成员变量
5.有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法
6.抽象类中可以包含静态方法
7.一个类只能
继承一个抽象类
接口:
1.接口中不能定义构造器
2.方法全部都是抽象方法
3.抽象类中的成员可以是 private、默认、protected、public
4.接口中定义的成员变量实际上都是常量
5.接口中不能有静态方法
6.一个类可以实现多个接口
相同:
1.不能够实例化
2.可以将抽象类和接口类型作为引用类型
3.一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要
被声明为抽象类
11.==和 equals 的区别?
equals 和== 最大的区别是一个是方法一个是运算符。
==:如果比较的对象是基本数据类型,则比较的是数值是否相等;如果比较的是引用数据类型,则比较的是对象
的地址值是否相等。
equals():用来比较方法两个对象的内容是否相等。
注意:equals 方法不能用于基本数据类型的变量,如果没有对 equals 方法进行重写,则比较的是引用类型的变
量所指向的对象的地址。
12.break 和 continue 的区别?
break 和 continue 都是用来控制循环的语句。
break 用于完全结束一个循环,跳出循环体执行循环后面的语句。
continue 用于跳过本次循环,执行下次循环。
13.throw 和 throws 的区别
throw:
1)throw 语句用在方法体内,表示抛出异常,由方法体内的语句处理。
2)throw 是具体向外抛出异常的动作,所以它抛出的是一个异常实例,执行 throw 一定是抛出了某种异常。
throws:
1)throws 语句是用在方法声明后面,表示如果抛出异常,由该方法的调用者来进行异常的处理。
2)throws 主要是声明这个方法会抛出某种类型的异常,让它的使用者要知道需要捕获的异常的类型。
3)throws 表示出现异常的一种可能性,并不一定会发生这种异常。
14.final、finally的区别?
1)final:用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,被其修饰的类不可继承。
2)finally:异常处理语句结构的一部分,表示总是执行。
15.Math.round(11.5)等于多少?Math.round(- 11.5) 又等于多少?
Math.round(11.5)的返回值是 12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加 0.5
然后进行取整。
16.数组有没有 length() 方法?String 有没有 length() 方法?
数组没有 length()方法,而是有 length 的属性。String 有 length()方法。JavaScript 中,获得字符串的长度是
通过 length 属性得到的,这一点容易和 Java 混淆。
17.String 、StringBuilder 、StringBuffer 的区别?
这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。
(1)首先说运行速度,或者说是执行速度,在这方面运行速度的快慢为:StringBuilder>StringBuffer>String
String最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
(2)再来说线程安全
在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的
(3)总结一下
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用于多线程下在字符缓冲区进行大量操作的情况
18.Java 的基本数据类型都有哪些各占几个字节?
byte 1
short 2
int 4
long 8
float 4
double 8
char 2
boolean 1
19.List ,Set, Map 是否继承来自 Collection 接口? 存取元素时, 有何差异?
List,Set 是继承 Collection 接口; Map 不是。
List:元素有放入顺序,元素可重复 ,通过下标来存取 和值来存取
Map:元素按键值对存取,无放入顺序
Set:元素无存取顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在 set 中的位置是有该
元素的 HashCode 决定的,其位置其实是固定的)
20.ArrayList list = new ArrayList(20);语句中的 list 集合大小扩充了几次?
0次,因为构造方法已经指定了容量。
21.集合和数组之间的区别?
- 数组是固定长度的,集合是可变长度的
- 数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型
- 数组存储的元素必须是同一个数据类型;集合存储的元素可以是不同的数据类型
22.Collection 和 Collections的区别。
- Collections是个java.util下的类,是针对集合类的一个工具类,提供一系列的静态方法,实现对集合的查找,排序,替换,线程安全化(将非同步的集合转成同步的)等操作。
- Collection是个java.util下的接口,他是各种集合结构的父接口,继承于他的接口主要有List和Set,提供了关于集合的一些操作,如插入,删除,遍历等。
- TGL站长关于常见问题的回复
问题地址: http://www.thegrouplet.com/thread-112923-1-1.html 问题: 网站配有太多的模板是否影响网站加载速度 月光答复: wp不需要删除其他的模板,不 ...
- Java SE 第二篇
二. Java SE 第二篇 1. Arrays 数组 // 声明一维数组,[]内不允许有值 int[] arr; int arr[]; // 创建一维数组对象,[]内必须有值 arr = new ...
- Java SE —— 专栏总集篇
前言: Java 语言,是相对于其他语言而言,门槛低,而且功能还强大的一门编程语言,本人十分看好这一门语言,但是,它也是有深度的,看过本人的<数据结构与算法>专栏的同学们有福了,因为本人在 ...
- 学习java随笔第一篇:搭建java平台(java se)
电脑系统:windows8 在这里介绍一下java平台的3个版本: Java SE--Java Standard Edition,Java的标准版,主要用于桌面级的应用和数据库开发. Java EE- ...
- java SE 入门之运算符(第三篇)
在 java 中主要有以上运算符,分为 赋值运算符 ,算术运算符.关系运算符(比较运算符),逻辑运算符和三目运算符(三元运算符). 我们一起来学习下吧! 一.赋值运算符 赋值运算符主要有五个.分别是 ...
- java SE 入门之语言与环境(第一篇)
Javase的语言与开发环境Keke2016年03月08日 Java属于-Oracle公司(甲骨文)创始人:Gosling1995年诞生1998年12月发布jdk1.22002年2月发布:jdk1.4 ...
- java SE 入门之输入输出(第四篇)
在第一篇,八大基本类型的时候,我就介绍了输出,当然,这些输出都是简单的,后续写到流的时候,在细化输入输出. 现在只要求看懂输入输出.输入其实就是接受键盘的输入. public class Hello ...
- java SE 入门之八大内置基本类型(第二篇)
本文采用eclipse 工具演示,如果您对eclipse 工具不了解,请先学习下 eclipse 工具的使用,这个里面只是简单的介绍下输出和注释: 安装完成eclipse 以后,双击进入 后一次点击 ...
- java SE 入门之控制语句&方法&递归算法(第五篇)
一 控制语句(选择结构) 在学习控制语句之前,我们要先明确两件事情,什么是顺序结构(也叫做顺序执行),什么是选择结构 (分支结构或分支执行或选择执行),我们的代码执行是分为先后顺序的,就像我们之前写的 ...
随机推荐
- python简明教程
Python简明教程 MachinePlay关注 0.7072018.09.26 01:49:43字数 2,805阅读 9,287 Python一小时快速入门 1.Python简介 pylogo. ...
- Dijkstra算法(Matlab实现)
a = [,,,,,,]; % 起点节点 b = [,,,,,,]; % 终点节点 c = [,,,,,,]; % 对应权值 g = digraph(a,b,c); % 创建图 [path,dista ...
- LNMP+HTTPS
title: "Lnmp + Https" date: 2019-08-28T16:18:20+08:00 draft: true --- 注:我的linux的ip地址为192.1 ...
- 疑问:Iterator 遍历器和数据集合各种遍历方法的区别
https://es6.ruanyifeng.com/#docs/iterator Iterator(遍历器)的概念 Iterator 接口主要供for...of消费 Iterator 的遍历过程是: ...
- VISIO 的一些技巧
1.复制绘图 如果格式改变,在“设计”选项卡里将“将主题运用于新建的形状”前面的√去掉
- 深度优先搜索DFS---求出矩阵中“块”的个数。
题目: 给出一个 m x n 的矩阵,矩阵中的元素为0或1.如果矩阵中有若干个 1是相邻的,那么称这些1构成了一个“块”.求给定的矩阵中“块”的个数. 0 0 0 0 0 0 0 0 0 0 0 0 ...
- Java代码操作Elasticsearch
创建maven项目,导入依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</a ...
- nginx tar包安装步骤
1.将tar包通过 Xftb工具传输到远程服务器 2.通过 cd 命令进入存放nginx包的文件夹目录 3.tar -zxvf + 文件名 解压 4.cd nginx-1.12.0 进入源码目录 5. ...
- Java出现次数最多的整数
描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20.然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来.如果有两个元 ...
- IDEA自定义TODO
配置自己的TODO标签 , 避免跟其他人产生错乱 打开TODO页签 , 有三种方式打开 菜单栏打开 View -> Tool Windows -> TODO 快捷键打开 Alt + 6 快 ...