Javolution 6.0.0 java
LexicalComparatorImpl.java
Go to the documentation of this file.
1 /*
2  * Javolution - Java(TM) Solution for Real-Time and Embedded Systems
3  * Copyright (C) 2012 - Javolution (http://javolution.org/)
4  * All rights reserved.
5  *
6  * Permission to use, copy, modify, and distribute this software is
7  * freely granted, provided that this notice is preserved.
8  */
9 package javolution.util.internal.comparator;
10 
11 import java.io.Serializable;
12 
13 import javolution.lang.MathLib;
15 
19 public class LexicalComparatorImpl implements Equality<CharSequence>,
20  Serializable {
21 
22  private static final long serialVersionUID = 7904852144917623728L;
23 
24  @Override
25  public int hashCodeOf(CharSequence csq) {
26  if (csq == null)
27  return 0;
28  if (csq instanceof String) // Optimization.
29  return csq.hashCode();
30  int h = 0;
31  for (int i = 0, n = csq.length(); i < n;) {
32  h = 31 * h + csq.charAt(i++);
33  }
34  return h;
35  }
36 
37  @Override
38  public boolean areEqual(CharSequence csq1, CharSequence csq2) {
39  if (csq1 == csq2)
40  return true;
41  if ((csq1 == null) || (csq2 == null))
42  return false;
43  if (csq1 instanceof String) { // Optimization.
44  if (csq2 instanceof String)
45  return csq1.equals(csq2);
46  return ((String) csq1).contentEquals(csq2);
47  } else if (csq2 instanceof String) { return ((String) csq2)
48  .contentEquals(csq1); }
49 
50  // None of the CharSequence is a String.
51  int n = csq1.length();
52  if (csq2.length() != n)
53  return false;
54  for (int i = 0; i < n;) {
55  if (csq1.charAt(i) != csq2.charAt(i++))
56  return false;
57  }
58  return true;
59  }
60 
61  @Override
62  public int compare(CharSequence left, CharSequence right) {
63  if (left == null)
64  return -1;
65  if (right == null)
66  return 1;
67  if ((left instanceof String) && (right instanceof String)) // Optimization.
68  return ((String) left).compareTo((String) right);
69  int i = 0;
70  int n = MathLib.min(left.length(), right.length());
71  while (n-- != 0) {
72  char c1 = left.charAt(i);
73  char c2 = right.charAt(i++);
74  if (c1 != c2)
75  return c1 - c2;
76  }
77  return left.length() - right.length();
78  }
79 }
javolution.util.internal.comparator.LexicalComparatorImpl.compare
int compare(CharSequence left, CharSequence right)
Definition: LexicalComparatorImpl.java:62
javolution.util.internal.comparator.LexicalComparatorImpl
Definition: LexicalComparatorImpl.java:20
javolution
javolution.util.internal.comparator.LexicalComparatorImpl.serialVersionUID
static final long serialVersionUID
Definition: LexicalComparatorImpl.java:22
javolution.lang.MathLib
Definition: MathLib.java:20
javolution.util.function.Equality
Definition: Equality.java:39
javolution.lang
Definition: Configurable.java:9
javolution.util.function
Definition: Consumer.java:9
javolution.util.internal.comparator.LexicalComparatorImpl.areEqual
boolean areEqual(CharSequence csq1, CharSequence csq2)
Definition: LexicalComparatorImpl.java:38
javolution.util.internal.comparator.LexicalComparatorImpl.hashCodeOf
int hashCodeOf(CharSequence csq)
Definition: LexicalComparatorImpl.java:25
javolution.util
Definition: FastBitSet.java:9
javolution.lang.MathLib.min
static int min(int x, int y)
Definition: MathLib.java:1010