Java笔试面试题整理第三波
转载至:http://blog.csdn.net/shakespeare001/article/details/51247785
作者:山代王(开心阳)
本系列整理Java相关的笔试面试知识点,其他几篇文章如下:
1、String的split(String regex)方法参数注意点
- String str = “12.03”;
- String[] res = str.spilt(”.”); //出错!!!

String str = "12.03";
String[] res = str.spilt("."); //出错!!!
此时,我们得到的res是为空的(不是null),即str = [];
2、关于hashCode方法
- public V put(K key, V value) {
- if (table == EMPTY_TABLE) { //key的hashCode值放在了table里面
- inflateTable(threshold);
- }
- if (key == null)
- return putForNullKey(value);
- int hash = hash(key); //计算我们传进来的key的hashcode值
- int i = indexFor(hash, table.length);
- for (Entry<K,V> e = table[i]; e != null; e = e.next) {
- Object k;
- if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { //将传进来的key的hashcode值于HashMap中的table里面存放的hashCode值比较
- V oldValue = e.value;
- e.value = value;
- e.recordAccess(this);
- return oldValue;
- }
- }
- modCount++;
- addEntry(hash, key, value, i);
- return null;
- }

public V put(K key, V value) {
if (table == EMPTY_TABLE) { //key的hashCode值放在了table里面
inflateTable(threshold);
}
if (key == null)
return putForNullKey(value);
int hash = hash(key); //计算我们传进来的key的hashcode值
int i = indexFor(hash, table.length);
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { //将传进来的key的hashcode值于HashMap中的table里面存放的hashCode值比较
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(hash, key, value, i);
return null;
}
- public class Person {
- private String name;
- private int age;
- public Person(String name,int age){
- this.name = name;
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- @Override
- public boolean equals(Object obj) {
- return this.name.equals(((Person)obj).name) && this.age== ((Person)obj).age;
- }
- }

public class Person {
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object obj) {
return this.name.equals(((Person)obj).name) && this.age== ((Person)obj).age;
}
}
- Person p1 = new Person(“lly”,18);
- Person p2 = new Person(“lly”,18);
- System.out.println(p1.equals(p2)); //返回true

Person p1 = new Person("lly",18);
Person p2 = new Person("lly",18);
System.out.println(p1.equals(p2)); //返回true
- <span style=“white-space:pre”> </span>Person p1 = new Person(“lly”, 18);
- System.out.println(p1.hashCode());
- HashMap<Person, Integer> hashMap = new HashMap<Person, Integer>();
- hashMap.put(p1, 1);
- System.out.println(hashMap.get(new Person(“lly”, 18))); //此时返回了null,没有按我们的意愿返回1

<span style="white-space:pre"> </span>Person p1 = new Person("lly", 18);
System.out.println(p1.hashCode());
HashMap<Person, Integer> hashMap = new HashMap<Person, Integer>();
hashMap.put(p1, 1);
System.out.println(hashMap.get(new Person("lly", 18))); //此时返回了null,没有按我们的意愿返回1
在《Java编程思想》一书中的P495页有如下的一段话:
“设计hashCode()时最重要的因素就是:无论何时,对同一个对象调用hashCode()都应该产生同样的值。如果在将一个对象用put()添加进HashMap时产生一个hashCdoe值,而用get()取出时却产生了另一个hashCode值,那么就无法获取该对象了。所以如果你的hashCode方法依赖于对象中易变的数据,用户就要当心了,因为此数据发生变化时,hashCode()方法就会生成一个不同的散列码”。
如下一个例子:
- public class Person {
- private String name;
- private int age;
- public Person(String name,int age){
- this.name = name;
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- @Override
- public int hashCode() {
- return name.hashCode()*37+age; //hashCode的返回值依赖于对象中的易变数据
- }
- @Override
- public boolean equals(Object obj) {
- return this.name.equals(((Person)obj).name) && this.age== ((Person)obj).age;
- }
- }

public class Person {
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int hashCode() {
return name.hashCode()*37+age; //hashCode的返回值依赖于对象中的易变数据
}
@Override
public boolean equals(Object obj) {
return this.name.equals(((Person)obj).name) && this.age== ((Person)obj).age;
}
}
- <span style=“white-space:pre”> </span>Person p1 = new Person(“lly”, 18);
- System.out.println(p1.hashCode());
- HashMap<Person, Integer> hashMap = new HashMap<Person, Integer>();
- hashMap.put(p1, 1);
- p1.setAge(13);//改变依赖的一个值
- System.out.println(hashMap.get(p1)); //此时还是返回为null,这是因为我们p1的hashCode值已经改变了

<span style="white-space:pre"> </span>Person p1 = new Person("lly", 18);
System.out.println(p1.hashCode());
HashMap<Person, Integer> hashMap = new HashMap<Person, Integer>();
hashMap.put(p1, 1);
p1.setAge(13);//改变依赖的一个值
System.out.println(hashMap.get(p1)); //此时还是返回为null,这是因为我们p1的hashCode值已经改变了
3、Override和Overload的区别
- public String getName(String str,int i){
- return null;
- }
- public String getName(int i,String str){
- return null;
- }

public String getName(String str,int i){
return null;
}
public String getName(int i,String str){
return null;
}
4、ArrayList、Vector、LinkedList区别
- ArrayList<String> arrayList = new ArrayList<String>();
- arrayList.add(null);
- arrayList.add(null);
- System.out.println(arrayList.size()); //输出为2
- LinkedList<String> linkedList = new LinkedList<String>();
- linkedList.add(null);
- Vector<String> vectorList = new Vector<String>();
- vectorList.add(null);

ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add(null);
arrayList.add(null);
System.out.println(arrayList.size()); //输出为2 LinkedList<String> linkedList = new LinkedList<String>();
linkedList.add(null); Vector<String> vectorList = new Vector<String>();
vectorList.add(null);
大多数的Java程序员使用ArrayList而不是Vector,因为同步完全可以由程序员自己来控制。
5、String、StringBuffer、StringBuilder区别
- <span style=“white-space:pre”> </span>String a = “abc”;
- String b = ”abc”;
- System.out.println(a == b); //打印 true

<span style="white-space:pre"> </span>String a = "abc";
String b = "abc";
System.out.println(a == b); //打印 true
- <span style=“white-space:pre”> </span>String a = “abc”;
- String b = ”abc”;
- b = b + ”def”;

<span style="white-space:pre"> </span>String a = "abc";
String b = "abc";
b = b + "def";
- String s = “def”;
- String str2 = new String(s);

String s = "def";
String str2 = new String(s);
- <span style=“white-space:pre”> </span>String a = “abc” + “def”; //速度很快
- StringBuilder sb = new StringBuilder();
- sb.append(”abc”).append(“def”);

<span style="white-space:pre"> </span>String a = "abc" + "def"; //速度很快
StringBuilder sb = new StringBuilder();
sb.append("abc").append("def");
- <span style=“white-space:pre”> </span>String a = “abc”;
- String b = ”def”;
- String c = a + b;

<span style="white-space:pre"> </span>String a = "abc";
String b = "def";
String c = a + b;
6、Map、Set、List、Queue、Stack的特点与用法
- <span style=“white-space:pre”> </span>Set<String> set = new HashSet<String>();
- set.add(”ddd”);
- set.add(”4444”);
- set.add(”555”);
- set.add(”777”);
- for(String s : set){
- System.out.println(s);
- }

<span style="white-space:pre"> </span>Set<String> set = new HashSet<String>();
set.add("ddd");
set.add("4444");
set.add("555");
set.add("777");
for(String s : set){
System.out.println(s);
}
- // Dummy value to associate with an Object in the backing Map–一个没有实际意义的Object对象
- private static final Object PRESENT = new Object();
- public HashSet() {
- map = new HashMap<>();
- }
- public boolean add(E e) {
- return map.put(e, PRESENT)==null;
- }

// Dummy value to associate with an Object in the backing Map--一个没有实际意义的Object对象
private static final Object PRESENT = new Object();
public HashSet() {
map = new HashMap<>();
}
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
- class Person{
- private String name;
- private int age;
- //set、get方法省略
- }
- List<Person> persons ;
- //也可使用如下方式
- List<Map<String,String>> persons ;
- Map<String,String> map = new HashMap<String,String>();
- map.put(”name”,“lly”);
- map.put(”age”,“18”);
- persons .add(map);

class Person{
private String name;
private int age;
//set、get方法省略
}
List<Person> persons ;
//也可使用如下方式
List<Map<String,String>> persons ;
Map<String,String> map = new HashMap<String,String>();
map.put("name","lly");
map.put("age","18");
persons .add(map);
Java笔试面试题整理第三波的更多相关文章
- Java笔试面试题整理第八波
转载至:http://blog.csdn.net/shakespeare001/article/details/51388516 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- Java笔试面试题整理第六波(修正版)
转载至:http://blog.csdn.net/shakespeare001/article/details/51330745 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- Java笔试面试题整理第五波
转载至:http://blog.csdn.net/shakespeare001/article/details/51321498 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- Java笔试面试题整理第四波
转载至:http://blog.csdn.net/shakespeare001/article/details/51274685 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- Java笔试面试题整理第二波
转载至:http://blog.csdn.net/shakespeare001/article/details/51200163 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- Java笔试面试题整理第一波
转载至:http://blog.csdn.net/shakespeare001/article/details/51151650 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- Java笔试面试题整理第七波
转载至:http://blog.csdn.net/shakespeare001/article/details/51388516 作者:山代王(开心阳) 1.super的作用 在Java中su ...
- Java工程师笔试题整理[校招篇]
Java工程师笔试题整理[校招篇] 隔着两个月即将开始校招了.你是不是也想借着这个机会崭露头角,拿到某些大厂的offer,赢取白富美.走上人生巅峰?当然如果你还没能打下Java基础,一定要先打 ...
- Java笔试面试题007
Java笔试面试题007 1.请用正則表達式匹配出QQ号(如果QQ号码为5-10位). 解答: ^ \d{5,10}$ 2.String, StringBuffer StringBuilder的差别. ...
随机推荐
- npm 设置和取消代理配置
设置代理npm config set proxy=http://127.0.0.1:8087npm config set registry=http://registry.npmjs.org12关于h ...
- js中的setTimeout第三个参数
setTimeout跟setInterval大家应该都很熟悉的,但是一直很少注意,原来这两个函数可以支持第三个参数的,但是IE就呵呵了,仅IE(6-9)呵呵了,其他浏览器都支持的。 第三个参数将作为回 ...
- 如何发布自己的node模块
一.注册自己的npm账户 在 npm 官网 https://www.npmjs.org 申请一个账号,并且进行必要的验证,需要填写用户名.密码和邮箱.并且注册成功后会向邮箱发一封邮件,需要进行验证. ...
- CentOS 使用yum命令安装出现错误提示”could not retrieve mirrorlist http://mirrorlist.centos.org
CentOS 使用yum命令安装出现错误提示"could not retrieve mirrorlist http://mirrorlist.centos.org这个错误, 在网上找了好多, ...
- 【阅读笔记】《C程序员 从校园到职场》第七章 指针和结构体
原文地址:让你提前认识软件开发(13):指针及结构体的使用 CSDN博客 https://blog.csdn.net/zhouzhaoxiong1227/article/details/2387299 ...
- 在myeclipse中使用./和../遇到的问题
今天用ajax验证的时候,ajax的代码一直不起作用,我在浏览器里打开了开发者模式,错误的原因是找不到"jquery-1.8.3.min.js",但是我的目录结构都没有问题. &l ...
- 20165326 java实验五
实验五 网络编程与安全 一.实验内容 任务一: 结对实现中缀表达式转后缀表达式的功能 MyBC.java 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java 这个代码在 ...
- nodejs -- require , exports , module
1. require , exports . -------------------------- 文件: 1) index.js //两种方式都可以: var forExports = requir ...
- 远程链接 aws Windows Server 2016 Base Nano
第一次接触Windows Server 2016 Base Nano,平时工作中或者自己私下使用win的服务器都是带桌面版本的 而这次在aws一不小心开了一台Nano服务,刚开始我都不知道这个是什么玩 ...
- 机器视觉:SSD Single Shot MultiBox Detector
今天介绍目标检测中非常著名的一个框架 SSD,与之前的 R-CNN 系列的不同,而且速度比 YOLO 更快. SSD 的核心思想是将不同尺度的 feature map 分成很多固定大小的 box,然后 ...