Is there a Heap in java? - Stack Overflow

文章推薦指數: 80 %
投票人數:10人

For Java 8, updating on an existing answer: You can use Java Priority Queue as a Heap. Min Heap: --> to keep the min element always on top, ... Home Public Questions Tags Users Companies Collectives ExploreCollectives Teams StackOverflowforTeams –Startcollaboratingandsharingorganizationalknowledge. CreateafreeTeam WhyTeams? Teams CreatefreeTeam Collectives™onStackOverflow Findcentralized,trustedcontentandcollaboratearoundthetechnologiesyouusemost. Learnmore Teams Q&Aforwork Connectandshareknowledgewithinasinglelocationthatisstructuredandeasytosearch. Learnmore IsthereaHeapinjava? AskQuestion Asked 9years,6monthsago Modified 6monthsago Viewed 125ktimes 114 21 IamportingaC++librarytoJavaandIneedaheapdatastructure.IsthereastandardimplementationorwillIneedtodoitmyself? javaheap Share Improvethisquestion Follow editedSep6,2021at21:54 iliketocode 7,00866goldbadges4747silverbadges6060bronzebadges askedJan4,2013at21:31 user1796942user1796942 3,00855goldbadges2727silverbadges3838bronzebadges 2 InadditiontothenativePriorityQueue,guavaprovidesaMinMaxPriorityQueue – ElliottFrisch Oct31,2014at21:34 relatedstackoverflow.com/questions/1098277/… – CiroSantilliПутлерКапут六四事 Nov16,2016at19:52 Addacomment  |  7Answers 7 Sortedby: Resettodefault Highestscore(default) Trending(recentvotescountmore) Datemodified(newestfirst) Datecreated(oldestfirst) 134 +100 ForJava8,updatingonanexistinganswer: YoucanuseJavaPriorityQueueasaHeap. MinHeap:-->tokeeptheminelementalwaysontop,soyoucanaccessitinO(1). PriorityQueueminHeap=newPriorityQueue(); MaxHeap:-->tokeepthemaxelementalwaysontop,thesameorderasabove. PriorityQueuemaxHeap=newPriorityQueue<>(Comparator.reverseOrder()); Whichisthesameas(Integero1,Integero2)->Integer.compare(o2,o1)or-Integer.compare(o1,o2)assuggestedfromotheranswers. Andyoucanuse: add-->toaddelementtothequeue.O(logn) remove-->togetandremovethemin/max.O(logn) peek-->toget,butnotremovethemin/max.O(1) Share Improvethisanswer Follow editedApr19,2021at23:16 answeredSep7,2019at12:52 AhmedHamdyAhmedHamdy 2,33711goldbadge1616silverbadges2323bronzebadges Addacomment  |  47 Minheap: PriorityQueueminHeap=newPriorityQueue(); Maxheap: PriorityQueuemaxHeap=newPriorityQueue(newComparator(){ @Override publicintcompare(Integero1,Integero2){ return-Integer.compare(o1,o2); } }); Share Improvethisanswer Follow editedMay30,2020at20:07 blacktide 9,21677goldbadges3131silverbadges4949bronzebadges answeredFeb13,2019at8:07 user2015398user2015398 48644silverbadges99bronzebadges 1 2 -Integer.compare(o1,o2);shallbesameasInteger.compare(o2,o1); – Naman Apr18,2021at14:14 Addacomment  |  24 InJavaPriorityQueuecanbeusedasaHeap. MinHeap PriorityQueueminHeap=newPriorityQueue<>(); MaxHeap PriorityQueuemaxHeap=newPriorityQueue<>(Comparator.reverseOrder()); Share Improvethisanswer Follow editedJan3at7:29 answeredApr12,2020at10:27 BoazBoaz 1,06477silverbadges1919bronzebadges 2 howisitdifferentfromthisorthisanswer? – Naman Apr18,2021at14:18 AtthetimeIwroteit,nootheranswershowedtheoptionofComparator.reverseOrder().Someansweredpostedandsomeeditedaftermypost – Boaz Apr19,2021at15:36 Addacomment  |  9 PriorityQueueusesaheap.Basedontheoracledocumentationathttps://docs.oracle.com/javase/8/docs/api/java/util/PriorityQueue.htmlitseemslikelythatitisanimplementationofabinaryheap.Idon'tthinkthereisanofficialimplementationofafibonacciorpairingheap,thoughI'dlovetoseeeitheroneofthetwoavailable. Share Improvethisanswer Follow answeredMay12,2017at23:42 PetePete 9111silverbadge22bronzebadges Addacomment  |  2 Noassuchthereisn'tbutyoucanusePriorityQueueasaHeap.ItsofficiallytoldbyOracletousePriorityQueueasaHeapyoucanalsorefertothislinkforfurtherclarification. PriorityQueueMinHeap=newPriorityQueue<>(); PriorityQueueMaxHeap=newPriorityQueue<>(Comparator.reverseOrder()); Share Improvethisanswer Follow editedMay30,2020at20:04 tomerpacific 3,8691111goldbadges2929silverbadges5050bronzebadges answeredMay30,2020at10:43 AnubhavMishraAnubhavMishra 13777bronzebadges 1 2 howisitdifferentfromthisorthisanswer? – Naman Apr18,2021at14:19 Addacomment  |  0 YoucanalsoconsiderTreeSet,whichguaranteeslog(n)timeforbasicoperations(add,remove,contains). Share Improvethisanswer Follow answeredMay26,2016at9:12 AdrianaCosmaAdrianaCosma 2722bronzebadges 2 3 TreeSetprovidesdifferentcharacteristicsthenaheap.PriorityQueueistheHeapstructureinjava.util.* – ahains Jun17,2016at3:21 3 Actually,TreeSetusesaTreeMapinternally,whichitisaRed-BlackTreeimplementationsoitisdifferentthanaheap. – AlfredoOsorio Feb7,2017at2:31 Addacomment  |  0 FromJavadocsPriorityQueuewhichisavailablesince1.5istheclasstouse. ThiscodeforMinHeapcreatesaPriorityQueuewiththedefaultinitialcapacity(11)thatordersitselementsaccordingtotheirnaturalorderinginwhichtheminisatthetop. //MINHEAP PriorityQueueminHeap=newPriorityQueue<>(); //equivalentto PriorityQueueminHeap=newPriorityQueue<>(11); Ifyouwanttoimplementaspecialorderingyouneedtooverridethecomparatorwiththisconstructor PriorityQueue​(intinitialCapacity,Comparatorcomparator); Since1.8wealsohavethisversion PriorityQueue​(Comparatorcomparator); whichhelpsyoucreatetheMaxHeapinmoreelegantwayssuchas //MAXHEAP PriorityQueuemaxHeap= newPriorityQueue<>((n1,n2)->Integer.compare(n2,n1)); //equivalentto PriorityQueuemaxHeap=newPriorityQueue<>(Comparator.reverseOrder()); Foraspecialcasecheckthisexamplethatshowsthenaturalorderingforacustomobject,inascenariowhereweordercustomersbasedontheirdistancetoafictionalrestaurant importjava.util.List; importjava.util.PriorityQueue; publicclassDeliveryHandler{ privatestaticfinalAddressrestaurant=newAddress(5.0,5.0); privatestaticclassAddressimplementsComparable

{ publicdoublex,y; publicAddress(doublex,doubley){ this.x=x; this.y=y; } publicdoubledistanceToShop(){ returnMath.pow(restaurant.x-x,2)+Math.pow(restaurant.y-y,2); } @Override publicintcompareTo(Addressother){ returnDouble.compare(this.distanceToShop(),other.distanceToShop()); } @Override publicStringtoString(){ return"Address{x=%s,y=%s}".formatted(x,y); } } publicstaticvoidmain(String[]args){ List
customers=List.of( newAddress(13,14), newAddress(3,1), newAddress(9,20), newAddress(12,4), newAddress(4,4)); PriorityQueue
queueServingClosest=newPriorityQueue<>(); queueServingClosest.addAll(customers); while(!queueServingClosest.isEmpty()){ System.out.println(queueServingClosest.remove()); } /*Prints Address{x=4.0,y=4.0} Address{x=3.0,y=1.0} Address{x=12.0,y=4.0} Address{x=13.0,y=14.0} Address{x=9.0,y=20.0} */ PriorityQueue
queueServingFurthest=newPriorityQueue<>( (a1,a2)->Double.compare(a2.distanceToShop(),a1.distanceToShop()) ); queueServingFurthest.addAll(customers); while(!queueServingFurthest.isEmpty()){ System.out.println(queueServingFurthest.remove()); } /*Prints Address{x=9.0,y=20.0} Address{x=13.0,y=14.0} Address{x=12.0,y=4.0} Address{x=3.0,y=1.0} Address{x=4.0,y=4.0} */ } } Refs 1-https://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html 2-https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/PriorityQueue.html Share Improvethisanswer Follow editedJun16,2021at18:43 answeredJun16,2021at15:27 mcvkrmcvkr 2,49966goldbadges3232silverbadges5959bronzebadges 2 1 Howisthisanydifferentthanthealreadyprovidedanswers? – SvetlinZarev Jun16,2021at18:38 3 @SvetlinZarevitgivesmorerefs,tellswhentheclasswasintroducedandupdated,givesanexampletonaturalorderingandotherusesforacustomobjectnotonlyIntegers.thanksforasking – mcvkr Jun16,2021at18:46 Addacomment  |  Highlyactivequestion.Earn10reputation(notcountingtheassociationbonus)inordertoanswerthisquestion.Thereputationrequirementhelpsprotectthisquestionfromspamandnon-answeractivity. Nottheansweryou'relookingfor?Browseotherquestionstaggedjavaheaporaskyourownquestion. TheOverflowBlog Measurableandmeaningfulskilllevelsfordevelopers SanFrancisco?MorelikeSanFrancis-go(Ep.468) FeaturedonMeta AnnouncingtheStacksEditorBetarelease! The[shopping]and[shop]tagsarebeingburninated Linked 45 JavaimplementationforMin-MaxHeap? 0 isthereaheapdatastructureforjava? 0 MostefficientwaytogettopkitemsinanarraylistJava Related 7475 IsJava"pass-by-reference"or"pass-by-value"? 3798 HowdoIefficientlyiterateovereachentryinaJavaMap? 1995 Javainnerclassandstaticnestedclass 1823 SortaMapbyvalues 3520 Whatisthedifferencebetweenpublic,protected,package-privateandprivateinJava? 4306 AvoidingNullPointerExceptioninJava 4544 HowdoIread/convertanInputStreamintoaStringinJava? 1982 DoesJavasupportdefaultparametervalues? 7374 Whyissubtractingthesetwotimes(in1927)givingastrangeresult? 26521 Whyisprocessingasortedarrayfasterthanprocessinganunsortedarray? HotNetworkQuestions CanyouhaveSoundTraprecordersascarry-onluggageinaplane? Whydidittakeover100yearsforBritaintobeginseriouslycolonisingAmerica? newtagformyequation-environment Ifaspecieskeepsgrowingthroughouttheir200-300yearlife,what"growthcurve"wouldbemostreasonable/realistic? Isthisa"teachers'lounge"? HowtopassthecurrentrowtoGeneratedColumnfunctioninPostgres? Whywouldspacetraderspickupandoffloadtheirgoodsfromanorbitingplatformratherthandirecttotheplanet? Revisedmanuscriptsenttoanewrefereeaftereditorhearingbackfromonereferee:What'sthepossiblereason? DeterminingintersectionofspatiallineswithcountypolygonsusingQGIS Lawyersaysbumpingsoftware’sminorversionwouldcost$2kto“refile”copyrightpaperwork.Isthistypical? Isaboxplotuseful,whenitdoesn'tevenlooklikeabox? Monopoleantenna:doescurrentflowinloops? Dobicyclestemshavecertifiedusageratings(road/XC/Enduro/DH)? Whatisthewordingtodeterminewhetherextradamageisorisnotmultipliedonacriticalhit? Submittingrevisedmanuscriptlongbeforeduedate Ethicsofkeepingagiftcardyouwonataraffleataconferenceyourcompanysentyouto? Gravitationalforceactingonamasslessbody? HowtoextendusefullifeofIRLEDandphotodiodepair Droppingnon-commutativeproductintheend Spacingbeforeandafter\color{} Wouldaspeareveroutperformabowwhenwieldedbyaninsanelypowerfulperson? MathProofs-whyaretheyimportantandhowaretheyuseful? Notationshorthandfortwonotesgoinginquicksuccession Stumped-partidentification morehotquestions Questionfeed SubscribetoRSS Questionfeed TosubscribetothisRSSfeed,copyandpastethisURLintoyourRSSreader. lang-java Yourprivacy Byclicking“Acceptallcookies”,youagreeStackExchangecanstorecookiesonyourdeviceanddiscloseinformationinaccordancewithourCookiePolicy. Acceptallcookies Customizesettings  



請為這篇文章評分?