小小又开始面试了,Java一年,面试总结一些
Java中的集合
Java中的集合有Set集合,List集合,Map集合,这三种集合。
分别对这几个集合进行学习。
Set集合
set集合注重独一无二的性质,该集合不会保存重复的集合。
使用例子
public class Demo4 {
public static void main(String[] args) {
//Set 集合存和取的顺序不一致。
Set hs = new HashSet();
hs.add("世界军事");
hs.add("兵器知识");
hs.add("舰船知识");
hs.add("汉和防务");
System.out.println(hs);
// [舰船知识, 世界军事, 兵器知识, 汉和防务]
Iterator it = hs.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
其下面有三个集合,分别为,HashSet,TreeSet,LinkedHashSet
分别对其复习
HashSet
HashSet 允许使用null元素,其底层原理为,保存的时候,key有值,value为object的hashMap
HashMap原理,hashMap.put(“apple”, 0)的时候,会先计算apple的hash为多少,然后put进入hashmap,的Entry的index部分。如果hashMap的hash出现冲突,此时会采用拉链法进行put。和hashset的最大区别在于key为null
保证依赖依靠 hashCode()和equals() 这两个方法。
TreeSet
同样基于TreeMap实现,其Object的值为value。
TreeMap底层为二叉树,在达到一定的程度会发生左旋转和右旋转,会进行相关的插入。
非同步线程不安全类型
LinkedHashSet
同样基于LinkedHashMap实现,其Object的值为value。
List 集合
List集合分为 ArrayList 和LinkList这两种。
ArrayList
对于ArrayList来说,其底层为数组,在达到一定程度的时候,通过复制实现扩容。
图如下
LinkList
对于LinkList来说,其底层为链表,其在后面增加其一个节点,作为其链表。
图如下
map集合
map集合是一种依靠键值对方式保存的数据,有HashMap,TreeMap,LinkedHashMap这几种。
HashMap
hashmap是一个用于存储key-value的键值对的集合,每一个键值对叫做entry,这些键值对分散存储在数组中,这个数组称为HashMap的主干,HashMap的每一个初始值都为null,例如对于hashMap.put(“apple”, 0) 的方法来说,插入key为apple的元素来说,这个时候需要利用hash函数确定插入的位置,然后进行存储。当发生hash冲突的时候,采用链表方法进行存储。
TreeMap
对于TreeMap而言,是一颗倒过来的树,在一定程度会发生旋转,防止倒。
LinkedHashMap
LinkedHashMap底层为链表,外加链表实现,如图所示 维护的是双重链表
关于finly 和return 语句的关系
对于finaly语句来说,总结为一句话为,无论如何finaly语句总会执行,
举例如下
public class tryDemo {
public static int show() {
try {
return 1;
}finally{
System.out.println("finally模块被执行");
}
}
public static void main(String args[]) {
System.out.println(show());
}
}
根据执行的结果可以看到,当有finaly语句的时候,finaly语句总会执行,返回值会等待到finaly语句执行之后,输出return语句。
根据这个特点,可以在finaly语句中更新return的值,达到更改return返回语句的目的。
Java中的基本数据类型
基本数据类型有8种。
分别如下
byte 8位
short 16位
int 32位
long 64位
float 32位
double 64位
boolean 只有true 和false
char 16位
Java多线程之start方法和run方法的区别
start
作用,启动一个线程,线程进入就绪状态,等待cpu分配时间片。
run
run方法是一个普通方法,还会在主线程里进行执行。而不会分配到另外一个子线程执行。
关于线程的状态
一共六种状态,分别为初始,运行,阻塞,等待,超时等待,终止,这六种状态。