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的差别. ...
随机推荐
- SSH Struts2+hiberante+Spring整合
使用SSH框架编写学生信息: 一.新建Java工程: (1)建立好Java各层级之间的结构:业务处理层dao,数据模型层domain,页面请求处理层(Struts2 MVC层)action,servi ...
- python全栈开发笔记---------字符串格式化
字符串格式化 %s 可以接收任何值, %d只能接收整形 .其他类型报错 msg ='i am %s my body' %'ales' print(msg) #i am ales my body msg ...
- 【转】python 中NumPy和Pandas工具包中的函数使用笔记(方便自己查找)
二.常用库 1.NumPy NumPy是高性能科学计算和数据分析的基础包.部分功能如下: ndarray, 具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组. 用于对整组数据进行快速运算的标准 ...
- Forth 采用CODE定义新词
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- AWK入门
AWK类型 AWK:源于AT&T实验室的AWK NAWK:AWK的升级版 GAWK:GNU AWK,兼容AWK和NAWK 程序结构 BEGIN语句块,可选 ...
- 经典的Foo和getName
搜了下经典的Foo和getName的题目,看了几个解释,懒得看,自己解一下,作为笔记. function Foo(){ getName = function(){ console.log(1); }; ...
- Oracle物化视图梳理
--物化视图可以分为三种类型:* 包含聚集的物化视图* 只包含连接的物化视图* 嵌套物化视图三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大. --物化视图创建方式(Build M ...
- 深入path类
Path类放在System.IO命名空间里.Path是一个只包含有静态方法的实例类,所以它不需要在使用之前实例化.它有各种方法用于处理文件的扩展名.文件名.根路径,以及和更多和路径相关的方面.下面就是 ...
- 9--Python入门--模块
模块简单来说是一个保存了python代码的文件很多python开源库就是模块 #例如我们调用科学计算库 numpy import numpy as np #as np是为了之后方便调用 from pa ...
- L2-010. 排座位(并查集)*
L2-010. 排座位 参考博客 #include<iostream> #include<math.h> using namespace std; ]; ][]; int fi ...