Java面试题之七

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

三十四、编码转换,怎样实现将GB2312 编码的字符串转换为ISO-8859-1 编码的字符串。

String a=new String("中".getBytes("gb2312"),"iso-8859-1");

String a=new String("中".getBytes("iso-8859-1"));

具体示例参考:java字符串应用之字符串编码转换_u010142437的博客-CSDN博客

三十五、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?

对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。

三十六、是否可以从一个static方法内部发出对非static方法的调用?

准确回答是不能直接调用。

因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象。比如你在main方法中直接去调用一个非static的方法,是不能通过编译的。但是你如果在静态方法中,先去实例化一个对象,然后在调用其方法是可以的。

三十七、写clone()方法时,通常都有一行代码,是什么?

super.clone();  Clone 有缺省行为,他负责产生正确大小的空间,并逐位复制。(首先要把父类中的成员复制到位,然后才是复制自己的成员)。

三十八、Collection和Collections的区别

1.Collection是集合的根接口,其下有set 及list,关于set和list前面已详细介绍过。

2.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

三十九、Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用。

Set集合元素不可重复,比较元素是否相等,要重写equals和hashcode 。

在比较时先调用hashCode方法,如果不相同,证明不相等;如果相同,再调用equals方法,如果equals方法相同,证明相等;不相同,证明不相等。

也就是说只有调用hashCode和equals都相等的情况下,才相等。其余均不相等。

至于equals()和==区别前面已经详细介绍过。

Contains用来判断集合中是否包含某个元素。

四十、用java 代码编写栈

package com.lovo;

public class Stack {
	int[] data;
	int maxSize;
	int top;

	public Stack(int maxSize) {
		this.maxSize = maxSize;
		data = new int[maxSize];
		top = -1;
	}

	/**
	 * 依次加入数据
	 * 
	 * @param data
	 *            要加入的数据
	 * @return 添加是否成功
	 */
	public boolean push(int data) {
		if (top + 1 == maxSize) {
			System.out.println("栈已满!");
			return false;
		}
		this.data[++top] = data;
		return true;
	}

	/**
	 * 从栈中取出数据
	 * 
	 * @return 取出的数据
	 */
	public int pop() throws Exception {
		if (top == -1) {
			throw new Exception("栈已空!");
		}
		return this.data[top--];
	}

	public static void main(String[] args) throws Exception {
		Stack stack = new Stack(1000);
		stack.push(1);
		stack.push(2);
		stack.push(3);
		stack.push(4);
		stack.push(5);
		while (stack.top >= 0) {
			System.out.println(stack.pop());
		}
	}
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值