国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JAVA基礎整理(六)---手寫簡單的HashMap來學習hashmap

Travis / 477人閱讀

摘要:學習手動寫一個簡單的進行理解結(jié)點的定義的基礎時一個數(shù)組,數(shù)組里每個元素是一個,他必須包括值,鍵值,,下一個結(jié)點,同一個值的結(jié)點用一條鏈栓起來。第一個結(jié)點的特殊操作第一個對上了修改一個元素查找一個元素

HashMap學習--手動寫一個簡單的HashMap進行理解 1.結(jié)點Node的定義
public class Node {
    public int hash;
    public Object key;
    public Object value;
    public Node next;
}

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

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

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

3.HashMap的增刪改查 增加一個元素
 public void put(K key,V value){
        Node newNode=new Node();
        Node lastNode=null;
        Boolean isRepeat=false;
        newNode.hash=myhash(key.hashCode(),table.length);//簡單的計算hash值的函數(shù),就是對數(shù)組大小進行取余,不考慮擴容以及優(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;
            }

        }

    }
刪除對應key值的元素
 public void delete(K key){
        int hash=myhash(key.hashCode(),table.length);
        Node temp=table[hash];
        Node prevNode=null;//記住前一個結(jié)點,刪除時要接上。
        while(temp!=null){
            //第一個結(jié)點的特殊操作
            if(temp.key.equals(table[hash].key)){
                //第一個對上了
                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;
                }

            }
        }
    }
修改一個元素
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;
            }
        }
    }
查找一個元素
 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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/74560.html

相關文章

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

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

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

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

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

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

    CoorChice 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<