Compare treemap in java

Class TreeMap

A Red-Black tree based NavigableMap implementation. The map is sorted according to the natural ordering of its keys, or by a Comparator provided at map creation time, depending on which constructor is used.

This implementation provides guaranteed log(n) time cost for the containsKey , get , put and remove operations. Algorithms are adaptations of those in Cormen, Leiserson, and Rivest’s Introduction to Algorithms.

Note that the ordering maintained by a tree map, like any sorted map, and whether or not an explicit comparator is provided, must be consistent with equals if this sorted map is to correctly implement the Map interface. (See Comparable or Comparator for a precise definition of consistent with equals.) This is so because the Map interface is defined in terms of the equals operation, but a sorted map performs all key comparisons using its compareTo (or compare ) method, so two keys that are deemed equal by this method are, from the standpoint of the sorted map, equal. The behavior of a sorted map is well-defined even if its ordering is inconsistent with equals ; it just fails to obey the general contract of the Map interface.

Note that this implementation is not synchronized. If multiple threads access a map concurrently, and at least one of the threads modifies the map structurally, it must be synchronized externally. (A structural modification is any operation that adds or deletes one or more mappings; merely changing the value associated with an existing key is not a structural modification.) This is typically accomplished by synchronizing on some object that naturally encapsulates the map. If no such object exists, the map should be «wrapped» using the Collections.synchronizedSortedMap method. This is best done at creation time, to prevent accidental unsynchronized access to the map:

SortedMap m = Collections.synchronizedSortedMap(new TreeMap(. ));

The iterators returned by the iterator method of the collections returned by all of this class’s «collection view methods» are fail-fast: if the map is structurally modified at any time after the iterator is created, in any way except through the iterator’s own remove method, the iterator will throw a ConcurrentModificationException . Thus, in the face of concurrent modification, the iterator fails quickly and cleanly, rather than risking arbitrary, non-deterministic behavior at an undetermined time in the future.

Читайте также:  background-attachment

Note that the fail-fast behavior of an iterator cannot be guaranteed as it is, generally speaking, impossible to make any hard guarantees in the presence of unsynchronized concurrent modification. Fail-fast iterators throw ConcurrentModificationException on a best-effort basis. Therefore, it would be wrong to write a program that depended on this exception for its correctness: the fail-fast behavior of iterators should be used only to detect bugs.

All Map.Entry pairs returned by methods in this class and its views represent snapshots of mappings at the time they were produced. They do not support the Entry.setValue method. (Note however that it is possible to change mappings in the associated map using put .)

This class is a member of the Java Collections Framework.

Источник

Java TreeMap Comparator

Twitter Facebook Google Pinterest

A quick guide to adding the comparator to sort by key and values in TreeMap in java and JDK 8.

1. Overview

In this tutorial, We’ll learn how to add a custom comparator to the TreeMap in java to sort by key and also sort by values.

If you are new to java comparators, please read an in-depth article on Java comparators with java 8 stream api.

2. Java TreeMap Comparator — Sort by Keys By Default

First, let us how to sort the keys with a comparator in java. But, before that just see how treemap sorts by default with keys.

package com.javaprogramto.collections.treemap.comparator; import java.util.Map; import java.util.TreeMap; public class TreeMapComparatorExample < public static void main(String[] args) < MapdesignationSalaryInUSD = new TreeMap<>(); designationSalaryInUSD.put("Software Engineer", 150_000); designationSalaryInUSD.put("Senior Software Engineer", 210_000); designationSalaryInUSD.put("Manger", 300_000); designationSalaryInUSD.put("Lead Engineer", 250_000); System.out.println("treemap - " + designationSalaryInUSD); > >

From the output, we can see that the treemap is sorted by keys by default even though we did not provide any comparator for it. Because of this reason, TreeMap is called as SortedMap.

3. Java TreeMap Comparator — Custom objects Sort by keys

But when the key objects are added for the user-defined or custom class objects then the default treemap sort does not work like Strings. In this case, we need to pass the comparator logic to the TreeMap constructor as in the below example. But, first, let us see without passing the comparator and what would be the output?

package com.javaprogramto.collections.treemap.comparator; import java.util.Map; import java.util.TreeMap; public class TreeMapComparatorCustomObjectsExample < public static void main(String[] args) < MapcustomerAgeMap = new TreeMap<>(); customerAgeMap.put(new Customer(123, "D"), 30); customerAgeMap.put(new Customer(102, "B"), 70); customerAgeMap.put(new Customer(135, "A"), 40); customerAgeMap.put(new Customer(130, "C"), 50); System.out.println("treemap - " + customerAgeMap); > > class Customer < private int id; private String name; public Customer(int id, String name) < super(); this.id = id; this.name = name; >// setters and getters @Override public String toString() < return "Customer [id=" + id + ", name=" + name + "]"; >>
Exception in thread "main" java.lang.ClassCastException: class com.javaprogramto.collections.treemap.comparator.Customer cannot be cast to class java.lang.Comparable (com.javaprogramto.collections.treemap.comparator.Customer is in unnamed module of loader 'app'; java.lang.Comparable is in module java.base of loader 'bootstrap') at java.base/java.util.TreeMap.compare(TreeMap.java:1291) at java.base/java.util.TreeMap.put(TreeMap.java:536) at com.javaprogramto.collections.treemap.comparator.TreeMapComparatorCustomObjectsExample.main(TreeMapComparatorCustomObjectsExample.java:12)

But in the case of the key as String type, we did not get any error because, String class implements a Comparable interface and String objects are successfully casted to Comparable interface. This is the reason to not throw any exception when adding any class that implements a Comparable interface.

To fix this class cast exception for the Customer class, we can do 2 things such as the first one is Customer class has to implement a Comparable interface or create the comparator for the Customer class.

In this example, the custom comparator is passed to the TreeMap constructor to sort the customer by id.

import java.util.Comparator; import java.util.Map; import java.util.TreeMap; public class TreeMapComparatorCustomObjectsExample2 < public static void main(String[] args) < MapcustomerAgeMap = new TreeMap<>(new Comparator() < @Override public int compare(Customer o1, Customer o2) < Integer id1 = o1.getId(); Integer id2 = o2.getId(); return id1.compareTo(id2); >>); customerAgeMap.put(new Customer(123, "D"), 30); customerAgeMap.put(new Customer(102, "B"), 70); customerAgeMap.put(new Customer(135, "A"), 40); customerAgeMap.put(new Customer(130, "C"), 50); System.out.println("treemap with comparator - " + customerAgeMap); > >

Custom comparator to sort the Customer key by name

Map customerAgeMap = new TreeMap<>(new Comparator() < @Override public int compare(Customer o1, Customer o2) < String name1 = o1.getName(); String name2 = o2.getName(); return name1.compareTo(name2); >>);

4. Java 8 TreeMap Comparator — Custom objects Sort by keys

public class TreeMapComparatorCustomObjectsExample4 < public static void main(String[] args) < MapcustomerAgeMap = new TreeMap<>(Comparator.comparing(Customer::getId)); customerAgeMap.put(new Customer(123, "D"), 30); customerAgeMap.put(new Customer(102, "B"), 70); customerAgeMap.put(new Customer(135, "A"), 40); customerAgeMap.put(new Customer(130, "C"), 50); System.out.println("java 8 - treemap sort by id - " + customerAgeMap); Map customerAgeMap2 = new TreeMap<>(Comparator.comparing(Customer::getName)); customerAgeMap2.put(new Customer(123, "D"), 30); customerAgeMap2.put(new Customer(102, "B"), 70); customerAgeMap2.put(new Customer(135, "A"), 40); customerAgeMap2.put(new Customer(130, "C"), 50); System.out.println("java 8 - treemap sort by name - " + customerAgeMap2); > >

java 8 — treemap sort by id — java 8 — treemap sort by name —

5. Java 8 TreeMap Comparator — Sort by values

Map or TreeMap sort by values can be done in different ways but we are doing it differently with TreeSet.

import java.util.Comparator; import java.util.Map; import java.util.SortedSet; import java.util.TreeMap; import java.util.TreeSet; public class TreeMapComparatorByValueExample < public static void main(String[] args) < // sorted set with the custom comparator SortedSet> sortedset = new TreeSet<>( new Comparator>() < @Override public int compare(Map.Entrye1, Map.Entry e2) < return e1.getValue().compareTo(e2.getValue()); >>); Map customerAgeMap = new TreeMap<>(Comparator.comparing(Customer::getId)); customerAgeMap.put(new Customer(123, "D"), 30); customerAgeMap.put(new Customer(102, "B"), 70); customerAgeMap.put(new Customer(135, "A"), 40); customerAgeMap.put(new Customer(130, "C"), 50); // adding treemap values to the treeset. sortedset.addAll(customerAgeMap.entrySet()); System.out.println("java 8 - treemap sort by value - " + sortedset); > >
java 8 - treemap sort by value - [Customer [id=123, name=D]=30, Customer [id=135, name=A]=40, Customer [id=130, name=C]=50, Customer [id=102, name=B]=70]

6. Conslusion

In this article, we’ve seen how to add a comparator to TreeMap to sort by keys and values in java and java 8.

Labels:

SHARE:

Twitter Facebook Google Pinterest

About Us

Java 8 Tutorial

  • Java 8 New Features
  • Java 8 Examples Programs Before and After Lambda
  • Java 8 Lambda Expressions (Complete Guide)
  • Java 8 Lambda Expressions Rules and Examples
  • Java 8 Accessing Variables from Lambda Expressions
  • Java 8 Method References
  • Java 8 Functional Interfaces
  • Java 8 — Base64
  • Java 8 Default and Static Methods In Interfaces
  • Java 8 Optional
  • Java 8 New Date Time API
  • Java 8 — Nashorn JavaScript

Java Threads Tutorial

Kotlin Conversions

Kotlin Programs

Java Conversions

  • Java 8 List To Map
  • Java 8 String To Date
  • Java 8 Array To List
  • Java 8 List To Array
  • Java 8 Any Primitive To String
  • Java 8 Iterable To Stream
  • Java 8 Stream To IntStream
  • String To Lowercase
  • InputStream To File
  • Primitive Array To List
  • Int To String Conversion
  • String To ArrayList

Java String API

  • charAt()
  • chars() — Java 9
  • codePointAt()
  • codePointCount()
  • codePoints() — Java 9
  • compareTo()
  • compareToIgnoreCase
  • concat()
  • contains()
  • contentEquals()
  • copyValueOf()
  • describeConstable() — Java 12
  • endsWith()
  • equals()
  • equalsIgnoreCase()
  • format()
  • getBytes()
  • getChars()
  • hashcode()
  • indent() — Java 12
  • indexOf()
  • intern()
  • isBlank() — java 11
  • isEmpty()
  • join()
  • lastIndexOf()
  • length()
  • lines()
  • matches()
  • offsetByCodePoints()
  • regionMatches()
  • repeat()
  • replaceFirst()
  • replace()
  • replaceAll()
  • resolveConstantDesc()
  • split()
  • strip(), stripLeading(), stripTrailing()
  • substring()
  • toCharArray()
  • toLowerCase()
  • transform() — Java 12
  • valueOf()

Spring Boot

$show=Java%20Programs

$show=Kotlin

accumulo,1,ActiveMQ,2,Adsense,1,API,37,ArrayList,18,Arrays,24,Bean Creation,3,Bean Scopes,1,BiConsumer,1,Blogger Tips,1,Books,1,C Programming,1,Collection,8,Collections,37,Collector,1,Command Line,1,Comparator,1,Compile Errors,1,Configurations,7,Constants,1,Control Statements,8,Conversions,6,Core Java,149,Corona India,1,Create,2,CSS,1,Date,3,Date Time API,38,Dictionary,1,Difference,2,Download,1,Eclipse,3,Efficiently,1,Error,1,Errors,1,Exceptions,8,Fast,1,Files,17,Float,1,Font,1,Form,1,Freshers,1,Function,3,Functional Interface,2,Garbage Collector,1,Generics,4,Git,9,Grant,1,Grep,1,HashMap,2,HomeBrew,2,HTML,2,HttpClient,2,Immutable,1,Installation,1,Interview Questions,6,Iterate,2,Jackson API,3,Java,32,Java 10,1,Java 11,6,Java 12,5,Java 13,2,Java 14,2,Java 8,128,Java 8 Difference,2,Java 8 Stream Conversions,4,java 8 Stream Examples,12,Java 9,1,Java Conversions,14,Java Design Patterns,1,Java Files,1,Java Program,3,Java Programs,114,Java Spark,1,java.lang,4,java.util. function,1,JavaScript,1,jQuery,1,Kotlin,11,Kotlin Conversions,6,Kotlin Programs,10,Lambda,2,lang,29,Leap Year,1,live updates,1,LocalDate,1,Logging,1,Mac OS,3,Math,1,Matrix,6,Maven,1,Method References,1,Mockito,1,MongoDB,3,New Features,1,Operations,1,Optional,6,Oracle,5,Oracle 18C,1,Partition,1,Patterns,1,Programs,1,Property,1,Python,2,Quarkus,1,Read,1,Real Time,1,Recursion,2,Remove,2,Rest API,1,Schedules,1,Serialization,1,Servlet,2,Sort,1,Sorting Techniques,8,Spring,2,Spring Boot,23,Spring Email,1,Spring MVC,1,Streams,31,String,61,String Programs,28,String Revese,1,StringBuilder,1,Swing,1,System,1,Tags,1,Threads,11,Tomcat,1,Tomcat 8,1,Troubleshoot,26,Unix,3,Updates,3,util,5,While Loop,1,

Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content

Источник

Оцените статью