Java一年,面试总结

小小又开始面试了,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底层为链表,外加链表实现,如图所示 维护的是双重链表

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方法是一个普通方法,还会在主线程里进行执行。而不会分配到另外一个子线程执行。

关于线程的状态

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

状态图如下

发表评论

电子邮件地址不会被公开。 必填项已用*标注