Java 知识点 集合+异常

来源:互联网 发布:建筑工地用工人员软件 编辑:程序博客网 时间:2024/06/02 09:39

集合

曾几何时,我还觉得集合好难,以后看吧,可是,我已经大三了啊;我要去找到工作啊,我得参加面试的啊;加油努力吧;


Hashmap的实现原理

我还是喜欢比较随便的记录一下自己是怎么想的;首先最底层有两种储存结构,数组和链表,数组易随机访问,难删除;链表则刚好相反;
这里写图片描述

  • 其实你就这么想;有这么一个数组,储存的是某种对象,这个对象呢,有一个键,有一个值;还有一个指向下一对象的指针;
    首先是键,它的作用是干啥呢,其实就是在数组里的一个位置;来了一个键,通过hash算法,分配到这里,然后键就不变;
    以后来的相同的hash的对象,也放在这里,只不过就是把当前数组里的那个给替换掉,然后整体移动一下;否则新加入的键值还得放到最后;那样我们还得储存链表末尾是谁;对于相同的键,我们直接覆盖值,就像null做的一样;
  • 相当于什么呢,你整理文件,你得创建一个分类吧,那现在不是,你是来一个文件分一个,一看见游戏,就决定分个游戏的文件夹,来了个word,你决定分个办公的文件夹;然后为了节省空间,游戏这个文件夹,只能看见最近加入的文件,其他的,你就得通过这个最近的,依次往下找;
  • 然后是什么呢,就是hashmap是可以储存null这个键值的,这个就比较的厉害了,null这个键下面只储存一个值;每次都是直接覆盖掉上次的;对于创建null来说,就先找一下,有的话就覆盖,没有的话,就新建;

HashTable

HashTable的内部存储结构:
HashTable和HashMap采用相同的存储机制,二者的实现基本一致,不同的是:
1、HashMap是非线程安全的,HashTable是线程安全的,内部的方法基本都是synchronized。
2、HashTable不允许有null值的存在。
在HashTable中调用put方法时,如果key为null,直接抛出NullPointerException。其它细微的差别还有,比如初始化Entry数组的大小等等,但基本思想和HashMap一样。

异常

我一直比较疑惑到底什么样的异常不用try-catch捕获,简单来说,就是不以捕捉的,因为捕捉,可查的异常是什么时候,编译的时候,这时候检查的错误都是简单的或者说很明显会出现错误,比如文件操作,这种操作出现错误很自然,也比较容易预计,所以java强制你try-catch;还有一些,例如数组越界,你不执行,基本不知道这会有异常,这不是预料到的,可能就是你写错了;这种一场不可查,所以不需要强制try-catch捕获;再加上error错误,蓝色的就是不可查的,粉色的就是可查的
这里写图片描述

0 0