java基础知识记载

本文详细介绍了Java基础中的字符串操作,包括String、StringBuffer和StringBuilder的差异,字符串反转方法,以及JavaIO流、线程池、多线程、并发、ArrayList与LinkedList等关键概念。
摘要由CSDN通过智能技术生成

一、java基础

1、java中操作字符串有哪些?它们之间的区别

操作字符串有:String、Stringbufefr、Stringbuilder

String和Stringbuffer、Stringbuilder的区别在于String声明的是不可变的对象,每次操作都会生成新的String对象,然后将指针指向新的String对象,而StringBuffer和StringBuild可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用String。

StringBuffer和StringBuilder最大的区别在于:

StringBuffer是线程安全的,而StringBuilder是非线程安全的,

但是StringBuilder的性能却高于Stringbuffer,

所以单线程环境下推荐使用StringBuilder,

多线程环境下推荐使用StringBuffer。

2、String str= "i"与String str = new String("i")一样么

不一样,因为内存的分配方式不同,

String str = "i" 的方式,java虚拟机会将其分配到常量池中;

而String str = new String("i")则会被分到堆内存中。

3、如何将字符串反转?

使用StringBuilder或者StringBuffer的reverse()方法:

// StringBuffer reverse
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("abcdefg");
System.out.println(stringBuffer.reverse()); // gfedcba
// StringBuilder reverse
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("abcdefg");
System.out.println(stringBuilder.reverse()); // gfedcba

4、String类的常用方法都有哪些?

  • indexOf():返回指定字符的索引
  • charAt():返回指定索引的字符
  • replace():字符串替换
  • trim():去除字符串两端空白
  • split():分割字符串,返回一个分割后的字符串数组
  • getBytes():返回字符串的byte类型数组
  • length():返回字符串的长度
  • toLowerCase():将字符串转换成小写字母
  • toUpperCase:将字符串转换成大写字母
  • substring():截取字符串
  • equals():字符串比较

5、抽象类必须要有抽象方法么?

抽象类不一定非要有抽象方法

6、普通类和抽象类有哪些区别?

  • 普通类不能包含抽象方法,抽象类可以包含抽象方法
  • 普通类可以直接实例化,抽象类不能直接实例化

7、抽象类不能使用final修饰符

因为被final修饰的类不能被其他类继承,而定义抽象类就是让其他类继承的,彼此定义产生了矛盾,

实际代码中final修饰抽象类编辑器会提示报错:

8、接口和抽象类的区别

  • 实现的区别:抽象类的子类使用extend来继承,接口使用implements来实现
  • 构造函数:抽象类可以用构造函数,接口不能有构造函数
  • main方法:抽象类可以有main方法,并且能运行main方法,但是接口中不能有main方法
  • 实现数量:类只能继承一个抽象类,但是可以实现多个接口
  • 访问修饰符:抽象类中的方法可以是任意访问修饰符,接口中的方法默认使用public修饰

9、java的IO流分几种?

按功能区分:输入流(input)和输出流(output)

按类型区分:字节流和字符流,它俩的区别:字节流按8位传输以字节为单位输入输出数据,字符流按16位传输以字符为单位输入输出数据

10、Files的常用方法有哪些?

  • Files.exists():检测文件路径是否存在
  • Files.createFile():创建文件
  • Files.createDirectory():创建文件夹
  • Files.delete():删除一个文件或目录
  • Files.copy():复制文件
  • Files.move():移动文件
  • Files.size():查看文件个数
  • Files.read():读取文件
  • Files.write():写入文件

11、List、Set、Map之间的区别

继承接口的区别:

List和Set的继承接口是collection,Map是没有显式的继承类的,但在JAVA中所有的类或接口都有共同的父类,即java.lang.Object类. 所以可以说,Map接口继承了java.lang.Object类。

常见实现类的区别:

List的常见实现类:Abstract(其常用子类有ArrayList、linkedList、Vector(线程安全))

Set的常用实现类:Abstract(其常用子类有HashSet、linkdeSet、TreeSet)

Map的常用实现类:HashMap、HashTable(线程安全)

常见方法的区别:

List常见方法:add() 、remove() 、clear()、get()、contains()、size()

Set常见方法:add() 、remove() 、clear()、contains()、size()

Map常见方法:put()、get()、remove()、clear()、containsKey()、containsValue()、keyset()、size()

元素是否可重复:

List可重复

Set不可重复

Map不可重复

元素是否有序:

List是有序的

Map是无序的

12、HashMap和Hashtable的区别

  • HashTable是同步的,HashMap是非同步的,但是效率上要比HashTable要高
  • HashMap允许空键值,而HashTable不允许

13、如何决定使用HashMap还是TreeMap?

对于在Map中插入、删除和定位元素这类操作,最好选择HashMap。

假如你需要对一个有序的key集合进行遍历,更好的选择是TreeMap。

14、ArrayList和LinkedList的区别

ArrayList底层的数据结构是数组,支持随机访问

LinkedList的底层数据结构是双向循环链表,不支持随机访问

使用下标访问一个元素,ArrayList的时间复杂度是O(1),而linkedList是O(n)

15、实现数组和List之间的转换

  • List转换为数组:调用ArrayList的toArray方法
  • 数组转换为List:调用Arrays的asList方法

16、Array和ArrayList有什么区别

  • Array可以容纳基本类型和对象,ArrayList只能容纳对象
  • Array是指定大小的,而ArrayList大小动态变化的
  • Array数组在存放的时候一定是同种类型的元素。ArrayList就不一定了,因为ArrayList可以存储Object。
  • ArrayList可以算是Array的加强版,是对Array有所取舍的加强。

二、多线程

1、并行和并发有什么区别?

  • 并行是指两个或者多个事件在同一时刻发生;并发是指两个或多个事件在同一时间间隔发生。
  • 并行是在不同实体上的多个事件,并发是在同一个实体上的多个事件。
  • 在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。

举例:

你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。

你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。  (不一定是同时的)

你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。 

并发的关键是你有处理多个任务的能力,不一定要同时。  

并行的关键是你有同时处理多个任务的能力。 

并发是轮流处理多个任务,并行是同时处理多个任务

2、线程和进程的区别

进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。

进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高。

线程是进程的一个实体,是cup调度和分派的基本单位,是比程序更小的能独立运行的基本单位。

同一个进程中的多个线程之间可以并发执行。

进程是线程的容器,不存在没有线程的进程,每个进程中至少有一个线程。

3、创建线程池有哪几种方式?

①newFixedThreadPool(int nThreads)

②newCachedTreadPool()

③newSingleThreadExecutor

④NewScheduledThreadPool(int corePoolSize)

4、线程池有哪些状态

线程池有5种状态:Running、shutDown、stop、Tidying、Terminated

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值