Java实习生面试(滴滴)

267 阅读1分钟

手写一个快速排序算法

司空见惯,代码就省略了。

手写一个Map数据结构的类

  • 问:你了解HashMap吗?

  • 答:了解

  • 问:好,那你可以写一个简单的Map吗?


//简单起见,成员变量都没有私有化
class MapArr{
public LinkedListDemo[] linkedListDemo;
public int size;

    public MapArr(int size) {
        this.size = size;
        linkedListDemo=new LinkedListDemo[size];
    }

    //确定数组下标的方法(取模法)
    public int site(int key){
        return key%size;
    }

    public void add(Entity entity){
        int site=site(entity.key);
        if(linkedListDemo[site]==null){
            linkedListDemo[site]=new LinkedListDemo();
        }
        linkedListDemo[site].add(entity);
    }

    public void delete(int key){
        int site=site(key);
        if(linkedListDemo[site]==null){
           return;
        }
       int res= linkedListDemo[site].delete(key);
        if(res==-1){
            linkedListDemo[site]=null;
        }
    }

    public void show(){
        for (int i = 0; i <size ; i++) {
            if(linkedListDemo[i]==null){
               continue;
            }
            linkedListDemo[i].show(i);
        }
    }
}

class Entity{
    public int key;
    public String value;
    public Entity next;

    public Entity(int key, String value) {
        this.key = key;
        this.value = value;
    }

    @Override
    public String toString() {
        return "Entity{" +
                "key=" + key +
                ", value='" + value + '\''+"}";
    }
}

class LinkedListDemo{

    public Entity head;

    public void add(Entity entity){
         if(head!=null){
             Entity temp=head;
             if(temp.next==null){
                 temp.next=entity;
                 return;
             }
             while(temp.next!=null){
                 temp=temp.next;
             }
             temp.next=entity;
         }else{
             head=entity;
         }
    }

    public int delete(int key){
        Entity temp=head;
        if(temp.next==null&&temp.key==key){
           return -1;
        }
        while (temp.next!=null){
            if(temp.next.key==key){
                temp.next=temp.next.next;
                return 1;
            }
            temp=temp.next;
        }
        return 0;
    }

    public void show(int i){
        Entity temp=head;
        if(temp.next==null){
            System.out.println(temp.toString());
        }else{
            while (temp.next!=null){
                System.out.println(temp.toString());
                temp=temp.next;
            }
            System.out.println(temp.toString());
        }

        System.out.println("数组下标为"+i+"的链表信息");
    }
}

以上为我个人理解的答案,相当于实现一个简单的hashmap,实际面试中我没有解答出来,汗颜...