View Javadoc

1   /*
2    *
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *     http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   */
19  package org.apache.hadoop.hbase.util;
20  
21  import java.util.Arrays;
22  
23  import org.apache.hadoop.hbase.classification.InterfaceAudience;
24  import org.apache.hadoop.hbase.classification.InterfaceStability;
25  
26  /**
27   * This class encapsulates a byte array and overrides hashCode and equals so
28   * that it's identity is based on the data rather than the array instance.
29   */
30  @InterfaceAudience.Private
31  @InterfaceStability.Stable
32  public class HashedBytes {
33  
34    private final byte[] bytes;
35    private final int hashCode;
36  
37    public HashedBytes(byte[] bytes) {
38      this.bytes = bytes;
39      hashCode = Bytes.hashCode(bytes);
40    }
41  
42    public byte[] getBytes() {
43      return bytes;
44    }
45  
46    @Override
47    public int hashCode() {
48      return hashCode;
49    }
50  
51    @Override
52    public boolean equals(Object obj) {
53      if (this == obj)
54        return true;
55      if (obj == null || getClass() != obj.getClass())
56        return false;
57      HashedBytes other = (HashedBytes) obj;
58      return (hashCode == other.hashCode) && Arrays.equals(bytes, other.bytes);
59    }
60  
61    @Override
62    public String toString() {
63      return Bytes.toStringBinary(bytes);
64    }
65  }