小小又开始面试了,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。

LinkedHashMap底层为链表,外加链表实现,如图所示 Java一年,面试总结插图 维护的是双重链表

List 集合

List集合分为 ArrayList 和LinkList这两种。

ArrayList

对于ArrayList来说,其底层为数组,在达到一定程度的时候,通过复制实现扩容。
图如下

Java一年,面试总结插图(1)

LinkList

对于LinkList来说,其底层为链表,其在后面增加其一个节点,作为其链表。
图如下
Java一年,面试总结插图(2)

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底层为链表,外加链表实现,如图所示 Java一年,面试总结插图 维护的是双重链表

关于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());
    }
}

Java一年,面试总结插图(3)

根据执行的结果可以看到,当有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方法是一个普通方法,还会在主线程里进行执行。而不会分配到另外一个子线程执行。

关于线程的状态

一共六种状态,分别为初始,运行,阻塞,等待,超时等待,终止,这六种状态。

状态图如下
Java一年,面试总结插图(4)