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的差别. ...
随机推荐
- keepalived高可用集群。
keepalived故障切换转移原理1vrrp协议:(vritual router redundancy protocol)虚拟路由冗余协议,2故障转移.keepalived三大功能1实现物理高可用, ...
- nopcommerce 4.1 学习2 -插件之挂件
先了解下nop4.1的一些插件有哪些类型: 1.支付插件 Nop.Plugin.Payments.PayPalStandard Nop.Plugin.Payments.CheckMoneyOrd ...
- 论坛短信息(JSP项目)
if("list".equals(action)){ String username = request.getSession().getAttribute("login ...
- top 常用
top -c 查看进程 同时 shift +m 内存倒序
- neutron之neutron_openvswitch_agent占用100%CPU资源问题
基于kolla-ansible部署的queens版本,基于docker stats查看openstack的资源占用,发现neutron_openvswitch_agent一直占用100%CPU资源,这 ...
- python day28--json,pickle,hashlib,logging
一.json格式的限制 1.json格式的key必须是字符串数据类型,如果是数字dumps后会被转为字符串. # dic = {1:2,3:4} # str_dic = json.dumps(dic) ...
- windows 重装系统
转载:https://blog.csdn.net/qq_41137650/article/details/80035921 老毛桃 大白菜都可以 电脑系统安装步骤我选的是用U盘做的系统 如果本计系 ...
- mql初学事物和视图
1.概念:一条或者多条sql语句的集合! 事务:就是一堆操作的集合,他们同生共死.要么都执行成功,要么都执行失败 2.事务的特性 ACID A:原子性 完整的,不可分割的 原子性 (Atomicity ...
- Python全栈之路----函数
基本介绍 定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 编程中的函数在英文中有很多不同的叫法:在BASIC中叫做subroutine(子过程或 ...
- "Error: [$compile:multidir] Multiple directives
angularjs 中控制台报"Error: [$compile:multidir] Multiple directives错误 可以在当前html元素之上增加父元素,在父元素中加入第二个指 ...