IntTrie.java
上传用户:szyujian
上传日期:2016-09-20
资源大小:320k
文件大小:2k
源码类别:

android开发

开发平台:

C/C++

  1. /*
  2.  * Copyright (C) 2008 Esmertec AG.
  3.  * Copyright (C) 2008 The Android Open Source Project
  4.  *
  5.  * Licensed under the Apache License, Version 2.0 (the "License");
  6.  * you may not use this file except in compliance with the License.
  7.  * You may obtain a copy of the License at
  8.  *
  9.  *      http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */
  17. package com.android.im.app;
  18. public class IntTrie {
  19.     private Node mHead;
  20.     class Node {
  21.         private Node mFirstChild;
  22.         private Node mNextSibling;
  23.         private char mKey;
  24.         int mValue;
  25.         public final void add(String key, int value) {
  26.             final int len = key.length();
  27.             Node n = this;
  28.             int index = 0;
  29.             while (index < len) {
  30.                 n = n.getOrCreateNode(key.charAt(index++));
  31.             }
  32.             n.mValue = value;
  33.         }
  34.         private Node getOrCreateNode(char key) {
  35.             for (Node n = mFirstChild; n != null; n = n.mNextSibling) {
  36.                 if (n.mKey == key) {
  37.                     return n;
  38.                 }
  39.             }
  40.             Node n = new Node();
  41.             n.mKey = key;
  42.             n.mNextSibling = mFirstChild;
  43.             mFirstChild = n;
  44.             return n;
  45.         }
  46.         Node getNode(char key) {
  47.             for (Node n = mFirstChild; n != null; n = n.mNextSibling) {
  48.                 if (n.mKey == key) {
  49.                     return n;
  50.                 }
  51.             }
  52.             return null;
  53.         }
  54.     }
  55.     public IntTrie(String[] dictionary, int[] values) {
  56.         final int len = dictionary.length;
  57.         if (len != values.length) {
  58.             throw new IllegalArgumentException("dictionary[] and values[] must be the same length");
  59.         }
  60.         mHead = new Node();
  61.         for (int i = 0; i < len; i++) {
  62.             mHead.add(dictionary[i], values[i]);
  63.         }
  64.     }
  65.     public Node getNode(char key) {
  66.         return mHead.getNode(key);
  67.     }
  68. }