Java面试总结--基础编

1:String,StringBuffer,StringBuilder

注意关于这个问题查看源码都足以说明下方的观点
回答思路: 从产生背景;从线程安全问题; 从内存消耗上;从时间上;来综合说明
回答示例:先来说说String(字符串常量),String的在内部中是用 final char[] value 来存放数据的
因此String有一个缺点,也就是当频繁的对字符串进行写(修改)操作的时候,就
不易使用String,因此后来在jdk1.0中StringBuffer就产生了,StringBuffer是字符串
变量,StringBuffer中的内部实现使用的 char[] value 也就是说是可变的,同时我们
可以看到StringBuffer在append的时候是线程安全的,同时也就会产生一个问题,
就是说速度会有所影响,于是乎在jdk5.0的时候StringBuilder诞生了,StringBuilder
针对写的速度问题进行了优化,单同时线程安全问题也得不到了保证。
最后总结:
在对字符串进行频繁的写操作的时候,不易使用String,如果考虑线程安全问题的
话应使用StringBuffer,不考虑安全性问题的话,使用StringBuilder即可
在对字符串进行频繁的读操作的时候使用String即可

2 :区分值传递和引用传递

在这里首先给出值传递和引用传递的定义(非常重要哈)
一个方法可以修改传递引用做对应的变量值
而不能修改值传递调用所对应的变量值。
如果明白了这个,其实值传递和引用传递也就搞明白了,如果此时你是懵逼的,别着急,别
心慌,继续向下看
再给出一个不接受反驳的事实: 在java中只有值传递,没有引用传递。(java中规定的)
这一点和上方那个定义,都先记住,接下来拿着这两个定义,接着向下看
对于java来说,有两种常见的方法传递形式 functionName(int a)基本数据类型形式的
functionName(Object b)引用形式传递形式的(并不是引用传递)
对于基本数据类型的,我相信应该不需要再说了,肯定是值传递。下面主要介绍引用形式的
在这里我以前一直没有搞明白的一个概念就是引用传递的含义,在这块,再次说一下引用传递
含义:引用传递可以修改引用所对应的变量值。接着咱看一下在java中的引用传递中变量值是
否发生了改变,如果没有发生改变那么就是值传递,如果发生了改变那么就是引用传递。
通过本人的代码测试证明,确实没有发生改变,所以此时是值传递,并不是引用传递,(在
这里只是给出了理解思路,代码我感觉还是自己去写,理解的才够透彻)。然后此时你应该有
个疑问,为什么对象中的内容改变了呢:其实很简单,只是把一个对象的引用复制了一份,然
后指向了相同的对象,所以会改变,看这里的引用的对象复制了一份,也可以说明是值传递,
因为对象的地址并没有发生改变。
注 : 其实以前一直没懂的原因是 没有搞明白值传递,引用传递的根本含义。

3:集合

说到集合先来看看一张关于集合总结的一张图片:
在这里插入图片描述
下面开始对其开始进行总结归纳:
Map

  • 有三种实现(HashMap,HashTable,TreeMap),都是键不可重复,值可重复。
  • 有两种数据结构hash表(HashMap,HashTable),二叉树(TreeMap)
  • HashMap和HashTable的区别,前者线程不安全,后者线程安全,前者key,value都允许为null,后者不允许。

List

  • 有三种实现(ArrayList,Vector,LinkedList),都是排列有序可重复。
  • 涉及到两种数据结构 数组(ArrayList,Vector),双向链接(LinkList)
  • 数组的数据结构,查询快,写操作慢,双向链接写操作快,查询慢。
  • ArrayList·和Vector 前者线程不安全,后者线程安全 。LinkedList线程不安全。

Set

  • 有三种实现(HashSet,TreeSet,LinkedHashSet)都是无序,不可重复,正好和list相反。
  • 使用两种种数据结构 hash表(HashSet),二叉树(treeSet),
  • HashSet写操作比较快。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值