成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JAVA基礎(chǔ)整理(六)---手寫簡(jiǎn)單的HashMap來(lái)學(xué)習(xí)hashmap

Travis / 484人閱讀

摘要:學(xué)習(xí)手動(dòng)寫一個(gè)簡(jiǎn)單的進(jìn)行理解結(jié)點(diǎn)的定義的基礎(chǔ)時(shí)一個(gè)數(shù)組,數(shù)組里每個(gè)元素是一個(gè),他必須包括值,鍵值,,下一個(gè)結(jié)點(diǎn),同一個(gè)值的結(jié)點(diǎn)用一條鏈栓起來(lái)。第一個(gè)結(jié)點(diǎn)的特殊操作第一個(gè)對(duì)上了修改一個(gè)元素查找一個(gè)元素

HashMap學(xué)習(xí)--手動(dòng)寫一個(gè)簡(jiǎn)單的HashMap進(jìn)行理解 1.結(jié)點(diǎn)Node的定義
public class Node {
    public int hash;
    public Object key;
    public Object value;
    public Node next;
}

HashMap的基礎(chǔ)時(shí)一個(gè)數(shù)組,數(shù)組里每個(gè)元素是一個(gè)node,他必須包括:hash值,key鍵值,value,next下一個(gè)結(jié)點(diǎn),同一個(gè)hash值的結(jié)點(diǎn)用一條鏈栓起來(lái)。

2.HashMap的定義
Node[] table;//核心數(shù)組
    int size;//元素個(gè)數(shù)
    
     public HashmapTest(){
        table=new Node[16];//初始化數(shù)組大小,盡量2的整數(shù)冪
        size=0;
    }

這個(gè)數(shù)組大小有講究,從兩個(gè)極端理解,當(dāng)大小為1時(shí),也就是所有的元素栓在一個(gè)位子上,也就是退化成了鏈表。如果數(shù)組很大,也就是元素所有元素幾乎可以散在數(shù)組的每個(gè)位子上,也就是退化成了數(shù)組。至于取2的整數(shù)冪,可以將取余的操作使用按位&,加快速度,除法在計(jì)算機(jī)中的速度是很慢的。

3.HashMap的增刪改查 增加一個(gè)元素
 public void put(K key,V value){
        Node newNode=new Node();
        Node lastNode=null;
        Boolean isRepeat=false;
        newNode.hash=myhash(key.hashCode(),table.length);//簡(jiǎn)單的計(jì)算hash值的函數(shù),就是對(duì)數(shù)組大小進(jìn)行取余,不考慮擴(kuò)容以及優(yōu)化
        newNode.key=key;
        newNode.value=value;
        newNode.next=null;
        if(table[newNode.hash]==null){
            table[newNode.hash]=newNode;
        }else{
            Node tmp=table[newNode.hash];
            while (tmp!=null){
                if(tmp.key.equals(key)){
                    isRepeat=true;
                    tmp.value=value;
                    break;
                }else{
                    lastNode=tmp;
                    tmp=tmp.next;
                }

            }
            if(isRepeat==false){
                lastNode.next=newNode;
            }

        }

    }
刪除對(duì)應(yīng)key值的元素
 public void delete(K key){
        int hash=myhash(key.hashCode(),table.length);
        Node temp=table[hash];
        Node prevNode=null;//記住前一個(gè)結(jié)點(diǎn),刪除時(shí)要接上。
        while(temp!=null){
            //第一個(gè)結(jié)點(diǎn)的特殊操作
            if(temp.key.equals(table[hash].key)){
                //第一個(gè)對(duì)上了
                if(temp.key.equals(key)){
                     table[hash]=temp.next;
                    break;
                }else{
                    prevNode=temp;
                    temp=temp.next;
                }
            }else{
                if(temp.key.equals(key)){
                    prevNode.next=temp.next;
                    break;
                }else{
                    temp=temp.next;
                }

            }
        }
    }
修改一個(gè)元素
public void set(K key,V value){
        Node temp=table[myhash(key.hashCode(),table.length)];
        while (temp!=null){
            if(temp.key.equals(key)){
                temp.value=value;
                break;
            }else {
                temp=temp.next;
            }
        }
    }
查找一個(gè)元素
 public V get(K key){
        int hash=myhash(key.hashCode(),table.length);
        Node tmp=table[hash];
        if(tmp==null){
            return null;
        }else{
            while (tmp!=null){
                if(tmp.key.equals(key)){
                    return (V)tmp.value;
                }else {
                    tmp=tmp.next;
                }
            }
            return null;
        }
    }

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74560.html

相關(guān)文章

  • 金三銀四,2019大廠Android高級(jí)工程師面試題整理

    摘要:原文地址游客前言金三銀四,很多同學(xué)心里大概都準(zhǔn)備著年后找工作或者跳槽。最近有很多同學(xué)都在交流群里求大廠面試題。 最近整理了一波面試題,包括安卓JAVA方面的,目前大廠還是以安卓源碼,算法,以及數(shù)據(jù)結(jié)構(gòu)為主,有一些中小型公司也會(huì)問(wèn)到混合開發(fā)的知識(shí),至于我為什么傾向于混合開發(fā),我的一句話就是走上編程之路,將來(lái)你要學(xué)不僅僅是這些,豐富自己方能與世接軌,做好全棧的裝備。 原文地址:游客kutd...

    tracymac7 評(píng)論0 收藏0
  • 手寫HashMap,快手面試官直呼內(nèi)行!

    摘要:那既然頻繁出,肯定不能是手撕紅黑樹我覺得面試官也多半撕不出來(lái),不撕紅黑樹,那這道題還有點(diǎn)救,慢慢往下看。簡(jiǎn)單說(shuō)來(lái)說(shuō),哈希表由兩個(gè)要素構(gòu)成桶數(shù)組和散列函數(shù)。所謂的哈希沖突,就是不同的經(jīng)過(guò)哈希函數(shù)計(jì)算,落到了同一個(gè)下標(biāo)。快手面試官真的嗎我不信。手寫HashMap?這么狠,面試都卷到這種程度了?第一次見到這個(gè)面試題,是在某個(gè)不方便透露姓名的Offer收割機(jī)大佬的文章:這……我當(dāng)時(shí)就麻了,我們都知道...

    Lemon_95 評(píng)論0 收藏0
  • 記一次慘痛面試經(jīng)歷

    摘要:把內(nèi)存分成兩種,一種叫做棧內(nèi)存,一種叫做堆內(nèi)存在函數(shù)中定義的一些基本類型的變量和對(duì)象的引用變量都是在函數(shù)的棧內(nèi)存中分配。堆內(nèi)存用于存放由創(chuàng)建的對(duì)象和數(shù)組。 一次慘痛的阿里技術(shù)面 就在昨天,有幸接到了阿里的面試通知,本來(lái)我以為自己的簡(jiǎn)歷應(yīng)該不會(huì)的到面試的機(jī)會(huì)了,然而機(jī)會(huì)卻這么來(lái)了,我卻沒(méi)有做好準(zhǔn)備,被面試官大大一通血虐。因此,我想寫點(diǎn)東西紀(jì)念一下這次的經(jīng)歷,也當(dāng)一次教訓(xùn)了。其實(shí)面試官大大...

    CoorChice 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<