|  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
Programmering
  • C /C + + -programmering
  • Computer Programspråk
  • Delphi Programmering
  • Java Programming
  • JavaScript programmering
  • PHP /MySQL Programmering
  • perl Programmering
  • python Programming
  • Ruby programmering
  • Visual Basics Programmering
  • * Dator Kunskap >> Programmering >> Java Programming >> Content

    Hur kan jag implementera en Arrayheap i Java för effektiv datalagring och hämtning?

    Implementering av en matrisbaserad hög (min-heap i detta exempel) i Java innebär att använda en enda matris för att representera högstrukturen. Så här kan du göra det, inklusive metoder för införande, borttagning (extraktion av det minsta elementet) och Peek (få det minsta elementet utan att ta bort det):

    `` `Java

    public class ArrayHeap {

    privat int [] hög;

    privat int -storlek;

    privat int kapacitet;

    public arrayHeap (int -kapacitet) {

    this.capacity =kapacitet;

    this.heap =ny int [kapacitet + 1]; // Index 0 används inte

    this.size =0;

    }

    // Helper -funktion för att få moderindex

    privat int förälder (int i) {

    return i / 2;

    }

    // Helper -funktion för att få vänster barnindex

    privat int vänster (int i) {

    return 2 * i;

    }

    // Helper -funktion för att få rätt barnindex

    privat int rätt (int i) {

    return 2 * i + 1;

    }

    // Helper Function för att Heapify Up efter insättning

    privat tomrum heapifyup (int i) {

    medan (i> 1 &&heap [förälder (i)]> heap [i]) {

    Swap (i, förälder (i));

    i =förälder (i);

    }

    }

    // Helper Function för att Heapify Down efter radering

    privat tomrum heapifydown (int i) {

    int minsta =i;

    int l =vänster (i);

    int r =höger (i);

    if (l <=size &&heap [l] minsta =l;

    }

    if (r <=size &&heap [r] minsta =r;

    }

    if (minsta! =i) {

    Swap (i, minsta);

    heapifydown (minsta);

    }

    }

    // Hjälperfunktion för att byta två element

    privat tomrumsswap (int i, int j) {

    int temp =heap [i];

    heap [i] =heap [j];

    hög [j] =temp;

    }

    // sätt in ett nytt element i högen

    public void Insert (int key) {

    if (storlek ==kapacitet) {

    Kasta ny illegalstateException ("Heap är full");

    }

    storlek ++;

    hög [storlek] =nyckel;

    heapifyup (storlek);

    }

    // extrahera (och ta bort) det minsta elementet

    public int ExtractMin () {

    if (size ==0) {

    Kasta ny illegalStateException ("Heap är tom");

    }

    int min =heap [1];

    hög [1] =hög [storlek];

    storlek--;

    heapifydown (1);

    return min;

    }

    // Få minsta element utan att ta bort det

    public int Peekmin () {

    if (size ==0) {

    Kasta ny illegalStateException ("Heap är tom");

    }

    returnera högen [1];

    }

    // Kontrollera om högen är tom

    public boolean isEmpty () {

    returstorlek ==0;

    }

    public static void main (String [] args) {

    ArrayHeap Heap =new ArrayHeap (10);

    heap.insert (10);

    Heap.Insert (5);

    Heap.Insert (15);

    Heap.Insert (3);

    Heap.Insert (8);

    System.out.println ("Minsta element:" + heap.peekmin ()); // utgång:3

    System.out.println ("Extraherad minimielement:" + heap.extractMin ()); // utgång:3

    System.out.println ("Nytt minimielement:" + heap.peekmin ()); // utgång:5

    }

    }

    `` `

    Denna implementering ger grundläggande högverksamhet. Kom ihåg att detta är en *min-heap *; För att göra det till en *max-heap *, måste du vända jämförelselogiken i `heapifyup` och` heapifydown '. För större högar, överväg att använda en mer sofistikerad datastruktur eller bibliotek om prestanda blir kritisk. Du kan också utöka detta för att hantera generiska för mer mångsidiga datatyper. Kom ihåg att hantera potentiella undantag som "illegalStateException" för tomma eller fulla högar.

    Tidigare:

    nästa:
    relaterade artiklar
    ·Autentisering krävs för Java
    ·Varför Beräkna en oföränderlig String hash värde
    ·Hur ansöker en Array i BorderLayout
    ·Vad är Java Console
    ·Hur nära ett JFrame i Java med en knapp
    ·Hur Upphör en session manuellt i JSP
    ·Hur man använder Boolean i Java
    ·Vad är meningen med Applet
    ·Hur du formaterar kommatecken i ett nummer i Java
    ·Hur man använder Java Decompiler
    Utvalda artiklarna
    ·Hur man gör Int del av C + + String
    ·Kan jag göra Android Apps Med Visual Basic
    ·Hur man kan räkna ut värdet av Java Expressions
    ·Hur du använder fall Tutorials
    ·Hur man startar Datorer
    ·HTML Formulär Validering Tutorial
    ·Hur man läser en karaktär från ett tangentbord i fö…
    ·Konvertera MySQL till Excel Använda PHP
    ·Hur man går med listor i Python
    ·Konvertera en Float till en int i C #
    Copyright © Dator Kunskap https://www.dator.xyz