ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>92国产在线视频,国产精品天堂,国产在线观看一区二区三区http://www.aygfsteel.com/zzzlyr/category/55177.htmlzh-cnSat, 06 Jan 2018 16:56:56 GMTSat, 06 Jan 2018 16:56:56 GMT60JAVA 实现链表队列http://www.aygfsteel.com/zzzlyr/articles/432415.htmlå¼ é’Šé’?/dc:creator>å¼ é’Šé’?/author>Tue, 28 Mar 2017 07:48:00 GMThttp://www.aygfsteel.com/zzzlyr/articles/432415.htmlhttp://www.aygfsteel.com/zzzlyr/comments/432415.htmlhttp://www.aygfsteel.com/zzzlyr/articles/432415.html#Feedback0http://www.aygfsteel.com/zzzlyr/comments/commentRss/432415.htmlhttp://www.aygfsteel.com/zzzlyr/services/trackbacks/432415.htmlpackage stacktest;

/**
* @Author: zzz
* @CreateTime: 2017/3/28 10:52
* @Description: 队列特点åQˆå…ˆ˜q›å…ˆå‡ºï¼‰(j¨ª)åQŒé“¾è¡¨å®žçŽ°çš„é˜Ÿåˆ— 在队头删除元素,在队ž®¾æ’入元素ã€?br /> * ˜q™æ ·æ‰èƒ½æ»¡èƒö队列的特性ã€?br /> */
public class MyQueue<T> {
private Node<T> front; //队列å¤ß_(d¨¢)¼Œåªèƒ½åˆ é™¤å…ƒç´ 

    private Node<T> rear; //队列ž®¾ï¼Œåªèƒ½ç”¨æ¥æ’入入元ç´?br />
    private int size;//队列的长åº?br />
/**
* 初始化队�br /> */
public MyQueue() {
front = new Node<T>();
rear = front;
}

/**
* 链表的数据结�br /> */
private class Node<T> {
public T data;
public Node<T> next;

public Node(T data, Node next) {
this.data = data;
this.next = next;
}

public Node(T data) {
this.data = data;
}

public Node() {
}
}

public void add(T data) {
//新插入的节点永远是尾节点åQŒå®ƒçš?/span>next 指向null(åÏx²¡æœ‰åŽ¾l§èŠ‚ç‚?/span>)
        Node newNode = new Node(data, null);
//让尾节点next指向新节ç‚?br />         rear.next = newNode;
rear = newNode;
size++;
}

public T pop() throws Exception {
if (size < 1) {
throw new Exception("错误åQŒé˜Ÿåˆ—䨓(f¨´)½Iºã€?/span>");
}
Node<T> nextNode = front.next;

front.next = nextNode.next;
size--;
if (size < 1) {
rear = front;
size = 0;
}
return nextNode.data;

}

//取队首元�br />
public T peek() throws Exception {
if (size < 1){
throw new Exception("错误åQŒé˜Ÿåˆ—䨓(f¨´)½Iºã€?/span>");
};
return front.next.data;

}
//˜q”回队列的大ž®?br /> public int getSize() {
return size;
}

//判断队列是否为空
public boolean isEmpty() {
return size == 0;
}

/**
* 遍历½Ž—法åQŒç§»åŠ?/span>front指针åQŒç›´åˆ?/span>front指针˜q½ä¸Šrear指针
*/
public void traverse(){
for(Node currentNode=front.next; currentNode!=null; currentNode=currentNode.next ){
System.out.println(currentNode.data);
}
}

public static void main(String[] args)throws Exception{
MyQueue<String> queue=new MyQueue<>();
for(int i=0;i<10;i++){
queue.add("88888-"+i);
}

/* for(int i=0;i<10;i++){
String s=queue.pop();
System.out.print(s+";");
}*/
queue.traverse();

}
}


]]>
JAVA æ ?链表和数¾l„实现的栈操ä½? pop push http://www.aygfsteel.com/zzzlyr/articles/432414.htmlå¼ é’Šé’?/dc:creator>å¼ é’Šé’?/author>Mon, 27 Mar 2017 07:43:00 GMThttp://www.aygfsteel.com/zzzlyr/articles/432414.htmlhttp://www.aygfsteel.com/zzzlyr/comments/432414.htmlhttp://www.aygfsteel.com/zzzlyr/articles/432414.html#Feedback0http://www.aygfsteel.com/zzzlyr/comments/commentRss/432414.htmlhttp://www.aygfsteel.com/zzzlyr/services/trackbacks/432414.html
栈的特点åQšåŽ˜q›å…ˆå‡ºï¼Œæ‰€ä»¥ä¸€ä¸ªçº¿æ€§é“¾è¡¨å®žçŽ°çš„æ ˆä¹Ÿåªèƒ½åœ¨ä¸€ç«¯æ“ä½œæ‰èƒ½æ»¡­‘Œ™¿™¿Uç‰¹æ€§ï¼›


/**
* @Author: zzz
* @CreateTime: 2017/3/27 14:51
* @Description:
*/
public class MyStack<T> {

private Node top;//永远指向栈顶元素
//元素个数
private int size;


/**
* 内部¾c»ï¼Œå®šä¹‰èŠ‚ç‚¹
*/
private class Node {
public T data;

public Node next;

public Node(T data, Node next) {
this.data = data;
this.next = next;
}

}

public void push(T data) {
//next 指向当前元素top,如果是第一个元�/span>next 指向null;
Node node = new Node(data, top);
//把当前元素指�/span>top
top = node;
size++;
}


public T pop() {
Node oldNode = top;
top = top.next;
oldNode.next = null;
//释放引用
return oldNode.data;
}

//˜q”回栈顶的元素,但不出栈
public T peek() {
return top.data;

}

// 判断链栈是否为空�br /> public boolean empty() {
return size == 0;
}

public String toString() {
// 链栈为空链栈�br /> if (empty())
return "[]";
else {
StringBuilder sb = new StringBuilder("[");
for (Node current = top; current != null; current = current.next) {
sb.append(current.data.toString() + ", ");
}
int len = sb.length();
return sb.delete(len - 2, len).append("]").toString();

}
}

public static void main(String[] args) throws Exception {
MyStack stack = new MyStack<String>();
for (int i = 0; i <= 10; i++) {
stack.push("111111-" + i);
}
System.out.println(stack);
System.out.println("frist pop="+stack.pop());
System.out.println("second pop="+stack.pop());
System.out.println("thrid pop="+stack.pop());
System.out.println("pop 之后�/span>"+stack);
}

/**
 * Created by zz.zhang on 2018/1/4.
 
*/
public class MyStack<T> {

    private int DEFAULT_SIZE = 8;//定义栈的初始默认长度
    private int capacity;//保存™åºåºæ ˆçš„长度
    private int size;//保存™åºåºæ ˆä¸­å…ƒç´ çš„个æ•?/span>
    private Object[] elementData;//定义一个数¾l„用于保存顺序栈中的元素

    public MyStack() {
        capacity = DEFAULT_SIZE;
        elementData = new Object[capacity];
    }

    public MyStack(int initSize) {
        capacity = 1;
        while (capacity < initSize) {
            capacity <<= 1;//ž®†capacity讄¡½®æˆå¤§äºŽinitSize的最ž®?‹Æ¡æ–¹
        }
        elementData = new Object[capacity];
    }

    public void push(T element) throws Exception {
        elementData[size++] = element;
    }

    public T pop() throws Exception {
        if (empty()) {
            throw new IndexOutOfBoundsException("栈空åQŒä¸èƒ½å‡ºæ ?);
        }
        T oldValue = (T) elementData[size - 1];
        elementData[--size] = null// è®„¡½®æˆnull è®©JVM垃圾回收
        return oldValue;
    }
public boolean empty() {
        return size == 0;
    }

    //˜q”回当前™åºåºæ ˆä¸­å…ƒç´ çš„个æ•?/span>
    public int length() {
        return size;
    }

    //获取栈顶元素åQŒä¸ä¼?x¨¬)将栈顶元素删é™?/span>
    public T peek() throws Exception {
        if (size == 0)
            throw new ArrayIndexOutOfBoundsException("æ ˆäØ“(f¨´)½I?);
        return (T) elementData[size - 1];
    }

    public void clear() {
        for (int i = 0; i < size; i++) {
            elementData[i] = null;
        }
        size = 0;
    }

    public static void main(String[] args)throws Exception{
        MyStack<String> stack=new MyStack<String>(30);
        for(int i=0 ;i<30;i++){
            stack.push(String.valueOf(i));
        }
        System.out.println(stack.pop());
        System.out.println(stack.peek());
    }
}





]]>
hash½Ž—法 (hashmap 实现原理)http://www.aygfsteel.com/zzzlyr/articles/413349.htmlå¼ é’Šé’?/dc:creator>å¼ é’Šé’?/author>Wed, 07 May 2014 00:37:00 GMThttp://www.aygfsteel.com/zzzlyr/articles/413349.htmlhttp://www.aygfsteel.com/zzzlyr/comments/413349.htmlhttp://www.aygfsteel.com/zzzlyr/articles/413349.html#Feedback0http://www.aygfsteel.com/zzzlyr/comments/commentRss/413349.htmlhttp://www.aygfsteel.com/zzzlyr/services/trackbacks/413349.html

hash½Ž—法 (hashmap 实现原理)

     Hash åQŒä¸€èˆ¬ç¿»è¯‘做“ æ•£åˆ—” åQŒä¹Ÿæœ‰ç›´æŽ¥éŸ³è¯‘䨓(f¨´)“ å“ˆå¸Œ” çš„,ž®±æ˜¯æŠŠä“Q意长度的输入åQˆåˆå«åšé¢„映ž®„, pre-imageåQ‰ï¼Œé€šè¿‡æ•£åˆ—½Ž—法åQŒå˜æ¢æˆå›ºå®šé•¿åº¦çš„输出,该输出就是散列倹{€‚è¿™¿Uè{换是一¿UåŽ‹¾~©æ˜ ž®„,也就是,散列值的½Iºé—´é€šå¸¸˜qœå°äºŽè¾“入的½Iºé—´åQŒä¸ 同的输入可能ä¼?x¨¬)散列成相同的输出,而不可能从散列值来唯一的确定输入倹{€‚简单的说就是一¿Uå°†ä»ÀL„é•¿åº¦çš„æ¶ˆæ¯åŽ‹¾~©åˆ°æŸä¸€å›ºå®šé•¿åº¦çš„æ¶ˆæ¯æ‘˜è¦çš„函数ã€?/span>

HASH ä¸»è¦ç”¨äºŽä¿¡æ¯å®‰å…¨é¢†åŸŸä¸­åŠ å¯†ç®—æ³•ï¼Œå®ƒæŠŠä¸€äº›ä¸åŒé•¿åº¦çš„ä¿¡æ¯è½¬åŒ–æˆæ‚ä¹Þqš„128 ä½çš„¾~–码, ˜q™äº›¾~–码值叫做HASH å€? ä¹Ÿå¯ä»¥è¯´åQŒhash ž®±æ˜¯æ‰‘Öˆ°ä¸€¿Uæ•°æ®å†…容和数据存放地址之间的映ž®„å…³¾p?/p>

例如字符ä¸?nbsp;hello çš„哈希算æ³?/p>

char* value = "hello"; int key = (((((((27* (int)'h'+27)* (int)'e') + 27) ã€€* (int)'l') + 27) * (int)'l' +27) * 27 ) + (int)'o' ;ã€?/p>

 

  æ•°ç»„的特ç‚ÒŽ(gu¨©)˜¯åQšå¯»å€å®ÒŽ(gu¨©)˜“åQŒæ’入和删除困难åQ›è€Œé“¾è¡¨çš„特点是:(x¨¬)å¯Õd€å›°éš¾åQŒæ’入和删除å®ÒŽ(gu¨©)˜“。那么我们能不能¾l¼åˆä¸¤è€…çš„ç‰ÒŽ(gu¨©)€§ï¼Œåšå‡ºä¸€¿Uå¯»å€å®ÒŽ(gu¨©)˜“åQŒæ’入删除也å®ÒŽ(gu¨©)˜“ 的数据结构?½{”案是肯定的åQŒè¿™ž®±æ˜¯æˆ‘们要提èµïL(f¨¥ng)š„哈希表,哈希表有多种不同的实现方法,我接下来解释的是最常用的一¿Uæ–¹æ³?#8212;— æ‹‰é“¾æ³•,我们可以理解ä¸?#8220; é“¾è¡¨ 的数¾l?#8221; åQŒå¦‚图:(x¨¬)


 

 

 

HashMap其实也是一个线性的数组实现çš?æ‰€ä»¥å¯ä»¥ç†è§£äØ“(f¨´)其存储数据的容器ž®±æ˜¯ä¸€ä¸ªçº¿æ€§æ•°¾l„。这可能让我们很不解åQŒä¸€ä¸ªçº¿æ€§çš„æ•°ç»„怎么实现按键值对来存取数据呢åQŸè¿™é‡ŒHashMap有做一些处理ã€?/p>

    1.首先HashMap里面实现一个静(r¨´n)态内部类Entry å…‰™‡è¦çš„属性有 key , value, next,从属性key,value我们ž®Þpƒ½å¾ˆæ˜Žæ˜„¡š„看出来Entryž®±æ˜¯HashMap键值对实现的一个基¼‹€bean,我们上面说到HashMap的基 ¼‹€ž®±æ˜¯ä¸€ä¸ªçº¿æ€§æ•°¾l?˜q™ä¸ªæ•°ç»„ž®±æ˜¯Entry[]åQŒMap里面的内定wƒ½ä¿å­˜åœ¨Entry[]里面ã€?/p>

     2.既然是线性数¾l„,ä¸ÞZ»€ä¹ˆèƒ½éšæœºå­˜å–åQŸè¿™é‡ŒHashMap用了(ji¨£n)一个小½Ž—法åQŒå¤§è‡´æ˜¯˜q™æ ·å®žçްåQ?/p>

 

Java代码  æ”¶è—ä»£ç 
  1. 存储æ—?  
  2.   
  3. int hash = key.hashCode();--> ˜q™ä¸ªhashCodeæ–ÒŽ(gu¨©)³•˜q™é‡Œä¸è¯¦˜q?只要理解每个keyçš„hash是一个固定的intå€?nbsp; 
  4.   
  5. int index = hash % Entry[].length;  
  6.   
  7. Entry[index] = value;  
  8.   
  9. 取值时:  
  10.   
  11. int hash = key.hashCode();  
  12.   
  13. int index = hash % Entry[].length;  
  14.   
  15. return Entry[index]  
 

到这里我们轻杄¡š„理解äº?ji¨£n)HashMap通过键值对实现存取的基本原ç?/p>

    3.ç–‘é—®åQšå¦‚果两个key通过hash % Entry[].length得到的index相同åQŒä¼š(x¨¬)不会(x¨¬)有覆盖的危险åQ?/p>

˜q™é‡ŒHashMap里面用到铑ּæ•°æ®¾l“构的一个概å¿?上面我们提到˜q‡Entry¾c»é‡Œé¢æœ‰ä¸€ä¸ªnext属æ€?作用是指向下一个Entry。打个比æ–? ½W¬ä¸€ä¸ªé”®å€¼å¯¹A˜q›æ¥,通过计算其keyçš„hash得到的index=0åQŒè®°å?Entry[0] = A.一ä¼?x¨¬)后又进来一个键值对B,通过计算其index也等äº?,现在怎么办?HashMapä¼?x¨¬)这样å?B.next = A,Entry[0] = B,如果又进来C,index也等äº?,那么C.next = B,Entry[0] = CåQ›è¿™æ ähˆ‘们发现index=0的地方其实存取了(ji¨£n)A,B,C三个键值对,他们通过next˜q™ä¸ªå±žæ€§é“¾æŽ¥åœ¨ä¸€èµ—÷€‚所以疑问不用担å¿?j¨©)ã€?/p>

åˆ°è¿™é‡ŒäØ“(f¨´)止,HashMap的大致实玎ͼŒæˆ‘们应该已经清楚äº?ji¨£n)ã€?/p>

当然HashMap里面也包含一些优化方面的实现åQŒè¿™é‡Œä¹Ÿå•°å—¦ä¸€ä¸‹ã€?/p>

比如åQšEntry[]的长度一定后åQŒéšç€map里面数据的越来越长,˜q™æ ·åŒä¸€ä¸ªindex的链ž®×ƒ¼š(x¨¬)很长åQŒä¼š(x¨¬)不会(x¨¬)影响性能åQ?/p>

HashMap里面讄¡½®ä¸€ä¸ªå› ç´ ï¼ˆä¹Ÿç§°ä¸ºå› å­ï¼‰(j¨ª)åQŒéšç€mapçš„size­‘Šæ¥­‘Šå¤§åQŒEntry[]ä¼?x¨¬)以一定的规则加长长度ã€?/p>

 

 

解决hash冲突的办�/p>

1åQ‰å¼€æ”‘Ö®šå€æ³•(¾U¿æ€§æŽ¢‹¹‹å†æ•£åˆ—åQŒäºŒ‹Æ¡æŽ¢‹¹‹å†æ•£åˆ—åQŒä¼ªéšæœºæŽ¢æµ‹å†æ•£åˆ—)(j¨ª)

2åQ‰å†å“ˆå¸Œæ³?/p>

3åQ‰é“¾åœ°å€æ³?/p>

4åQ‰å¾ç«‹ä¸€ 公共溢出åŒ?/p>

 

java 中h(hu¨¢n)ashmap的解军_Šžæ³•å°±æ˜¯é‡‡ç”¨çš„é“‘Öœ°å€æ³?br />转蝲文章



]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ÒÀ°²ÏØ| ÓñÊ÷ÏØ| ÄϳäÊÐ| ¶«ÀöÇø| óÞÁ¬ÏØ| ºÏ·ÊÊÐ| ½­´¨ÏØ| ½ÒÑôÊÐ| ´¾°²ÏØ| ÏæÒõÏØ| Õý°²ÏØ| ¿âÂׯì| ÐÂÎÅ| Ì쳤ÊÐ| ¶«À¼ÏØ| ÖÐɽÊÐ| ½­ÓÀÏØ| ÄêϽ£ºÊÐÏ½Çø| ÄϰÄÏØ| Õ´»¯ÏØ| È·É½ÏØ| ÐË»¯ÊÐ| ¼¦ÔóÏØ| ¿ª½­ÏØ| ¼¨ÏªÏØ| ÎäÒåÏØ| ÁøºÓÏØ| º£ÃÅÊÐ| ÄáÀÕ¿ËÏØ| Çà´¨ÏØ| ÏÄÒØÏØ| SHOW| ²ý¶¼ÏØ| µ¦³ÇÏØ| ¿­ÀïÊÐ| ½­³Ç| ¶¨ÏåÏØ| 캵ÂÏØ| ʯÊ×ÊÐ| ¹ðÑôÏØ| ƽÌÁÏØ|