# Class HammingDistance

java.lang.Object
org.apache.commons.text.similarity.HammingDistance

All Implemented Interfaces:
  `BiFunction<CharSequence, CharSequence, Integer>, EditDistance<Integer>, ObjectSimilarityScore<CharSequence, Integer>, SimilarityScore<Integer>`

public class HammingDistance extends Object implements EditDistance<Integer>
The hamming distance between two strings of equal length is the number of positions at which the corresponding symbols are different.

For further explanation about the Hamming Distance, take a look at its Wikipedia page at https://en.wikipedia.org/wiki/Hamming_distance.

Since:
  1.0

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `HammingDistance()`
  Creates a new instance.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Integer`
  `apply(CharSequence left, CharSequence right)`
  Computes the Hamming Distance between two strings with the same length.
  `<E> Integer`
  `apply(SimilarityInput<E> left, SimilarityInput<E> right)`
  Computes the Hamming Distance between two strings with the same length.

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

  ### Methods inherited from interface BiFunction

  `andThen`

- ## Constructor Details

  - ### HammingDistance

    public HammingDistance()
    Creates a new instance.

- ## Method Details

  - ### apply

    public Integer apply(CharSequence left, CharSequence right)
    Computes the Hamming Distance between two strings with the same length.

    The distance starts with zero, and for each occurrence of a different character in either String, it increments the distance by 1, and finally return its value.

    Since the Hamming Distance can only be calculated between strings of equal length, input of different lengths will throw IllegalArgumentException

        distance.apply("", "")               = 0
        distance.apply("pappa", "pappa")     = 0
        distance.apply("1011101", "1011111") = 1
        distance.apply("ATCG", "ACCC")       = 2
        distance.apply("karolin", "kerstin"  = 3

    Specified by:
      `apply` in interface `BiFunction<CharSequence, CharSequence, Integer>`
    Specified by:
      `apply` in interface `ObjectSimilarityScore<CharSequence, Integer>`
    Specified by:
      `apply` in interface `SimilarityScore<Integer>`
    Parameters:
      `left` - the first input, must not be null.
      `right` - the second input, must not be null.
    Returns:
      distance.
    Throws:
      `IllegalArgumentException` - if either input is `null` or if they do not have the same length.

  - ### apply

    public <E> Integer apply(SimilarityInput<E> left, SimilarityInput<E> right)
    Computes the Hamming Distance between two strings with the same length.

    The distance starts with zero, and for each occurrence of a different character in either String, it increments the distance by 1, and finally return its value.

    Since the Hamming Distance can only be calculated between strings of equal length, input of different lengths will throw IllegalArgumentException

        distance.apply("", "")               = 0
        distance.apply("pappa", "pappa")     = 0
        distance.apply("1011101", "1011111") = 1
        distance.apply("ATCG", "ACCC")       = 2
        distance.apply("karolin", "kerstin"  = 3

    Type Parameters:
      `E` - The type of similarity score unit.
    Parameters:
      `left` - the first input, must not be null.
      `right` - the second input, must not be null.
    Returns:
      distance.
    Throws:
      `IllegalArgumentException` - if either input is `null` or if they do not have the same length.
    Since:
      1.13.0