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的差别. ...
随机推荐
- 如何解析超长的protobuf zhuan
在调用protobuf的ParseFromString(str)方法时,默认情况下,如果str的长度>64MB,会返回失败. 这里给出了解释,主要是出于安全因素的考虑. 可以通过SetTotal ...
- Win10系列:C#应用控件基础17
Popup控件 在应用程序中使用Popup控件时,通常会先将其设置为隐藏状态,当用户触发应用中已定义的事件时,Popup控件将以弹出窗口的方式显示相关信息来提示用户操作. 在XAML文件中,Popup ...
- 3D打印GCODE文件学习(二)
大家可以自己实践一下,那么怎么打开GCODE呢?很简单,只要在桌面上创建一个word文档,然后把“.”后面的docx改成GCODE,它会跳出一个是否更改的框,点击是就行了,然后右键,点击Edit wi ...
- Python *Mix_w8
文件操作的函数 文件可迭代 open(文件名(路径), mode="?", encoding="字符集") f = open("../Python/是 ...
- numpy-随机数
import numpy as np nr=np.random nr.seed(0) np.set_printoptions(precision=2) # 只显示小数点后2位 print(nr.ran ...
- Codeforces Round #244 (Div. 2) C. Checkposts (tarjan 强连通分量)
题目:http://codeforces.com/problemset/problem/427/C 题意:给你n座城市,m条有向道路,然后有一个机制,你在某一个城市设置检查点,那么被设置的检查点受保护 ...
- 18-10-09 Linux常用命令大全(非常全!!!)
Linux常用命令大全(非常全!!!) Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制, ...
- session_unset,session_destroy
session_unset()释放当前用户在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的sessionid session_destroy()删除当前用户对应 ...
- FCC JS基础算法题(10):Falsy Bouncer(过滤数组假值)
题目描述: 删除数组中的所有假值.在JavaScript中,假值有false.null.0."".undefined 和 NaN. 使用filter方法,过滤掉生成的 Boolea ...
- http/ftp等的URL匹配正则表达式 ZT
网上流传着多种匹配URL的正则表达式版本,但我经过试验,最好用的还是从stackoverflow上查到的: (https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_| ...