java.util.TreeSet#size ( )源码实例Demo

下面列出了java.util.TreeSet#size ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: xodus   文件: TreeCursorNoDuplicatesTest.java
@Test
public void testInsertDeletes() {
    final ByteIterable value = value("value");
    final TreeSet<String> keys = new TreeSet<>();
    tm = createMutableTree(false, 1);
    for (int i = 0; i < 10000; ++i) {
        final String key = rndString();
        if (keys.add(key)) {
            Assert.assertTrue(tm.add(key(key), value));
        }
        if (keys.size() > 1000) {
            final String obsoleteKey = keys.first();
            keys.remove(obsoleteKey);
            Assert.assertTrue(tm.delete(key(obsoleteKey)));
        }
    }
    testCursorOrder(keys);
}
 
/**
 * 10             20     30   ,t = 3
 * 12   15  18
 * 15  18     21
 *
 * @param nums
 * @param k    k 是索引之间的最大差值
 * @param t    是两个数值之间的最大差值
 * @return
 */
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
    TreeSet<Long> set = new TreeSet<>();
    for (int i = 0; i < nums.length; i++) {

        // 向右扩展看地板
        Long floor = set.floor((long) nums[i] + t);
        if ((floor != null && floor >= nums[i])) {
            return true;
        }

        // 向左扩展看天花板

        Long ceiling = set.ceiling((long) nums[i] - t);
        if ((ceiling != null && ceiling <= nums[i])) {
            return true;
        }

        // 下面两步先后顺序无所谓
        set.add((long) nums[i]);
        if (set.size() == (k + 1)) {
            set.remove((long) nums[i - k]);
        }
    }
    return false;
}
 
源代码3 项目: code   文件: Solution2.java
/**
 * 题目地址:https://leetcode-cn.com/problems/contains-duplicate-iii/
 * 题意:nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 ķ
 * -------------------------------------------------------------------
 * 思考:
 * 数据特征:
 *     输入:数组、无序、所有整数(long)
 *     输出:boolean
 * -------------------------------------------------------------------
 * 思路:在思路1中维护的滑动窗口中,找到满足t,需要线性搜索耗时O(o)
 *  可以优化为维护一个BST,BST搜索耗时O(log(n))
 * -------------------------------------------------------------------
 * 时间复杂度:O(n*log(min(k,n)))
 * 空间复杂度:O(min(k,n))
 * -------------------------------------------------------------------
 * 执行用时 :44 ms, 在所有 Java 提交中击败了25.79%的用户
 * 内存消耗 :36.9 MB, 在所有 Java 提交中击败了89.89%的用户
 */
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
    TreeSet<Long> set = new TreeSet<>();
    for (int i = 0; i < nums.length; ++i) {
        // Find the successor of current element
        Long s = set.ceiling((long) nums[i]);//返回大于或等于给定键值的最小键值
        if (s != null && s - nums[i] <= t) return true;

        // Find the predecessor of current element
        Long g = set.floor((long) nums[i]);//返回小于或等于给定键值的最大键值
        if (g != null && nums[i] - g <= t) return true;

        set.add((long) nums[i]);
        if (set.size() > k) {
            set.remove((long) nums[i - k]);
        }
    }
    return false;
}
 
源代码4 项目: Android-Keyboard   文件: UserDictionaryList.java
/**
 * Creates the entries that allow the user to go into the user dictionary for each locale.
 * @param userDictGroup The group to put the settings in.
 */
protected void createUserDictSettings(final PreferenceGroup userDictGroup) {
    final Activity activity = getActivity();
    userDictGroup.removeAll();
    final TreeSet<String> localeSet =
            UserDictionaryList.getUserDictionaryLocalesSet(activity);

    if (localeSet.size() > 1) {
        // Have an "All languages" entry in the languages list if there are two or more active
        // languages
        localeSet.add("");
    }

    if (localeSet.isEmpty()) {
        userDictGroup.addPreference(createUserDictionaryPreference(null));
    } else {
        for (String locale : localeSet) {
            userDictGroup.addPreference(createUserDictionaryPreference(locale));
        }
    }
}
 
源代码5 项目: j2objc   文件: DateTimePatternGenerator.java
/**
 * Used by CLDR tooling; not in ICU4C.
 * Note, this will not work correctly with normal skeletons, since fields
 * that should be related in the two skeletons being compared - like EEE and
 * ccc, or y and U - will not be sorted in the same relative place as each
 * other when iterating over both TreeSets being compare, using TreeSet's
 * "natural" code point ordering (this could be addressed by initializing
 * the TreeSet with a comparator that compares fields first by their index
 * from getCanonicalIndex()). However if comparing canonical skeletons from
 * getCanonicalSkeletonAllowingDuplicates it will be OK regardless, since
 * in these skeletons all fields are normalized to the canonical pattern
 * char for those fields - M or L to M, E or c to E, y or U to y, etc. -
 * so corresponding fields will sort in the same way for both TreeMaps.
 * @deprecated This API is ICU internal only.
 * @hide original deprecated declaration
 * @hide draft / provisional / internal are hidden on Android
 */
@Deprecated
public boolean skeletonsAreSimilar(String id, String skeleton) {
    if (id.equals(skeleton)) {
        return true; // fast path
    }
    // must clone array, make sure items are in same order.
    TreeSet<String> parser1 = getSet(id);
    TreeSet<String> parser2 = getSet(skeleton);
    if (parser1.size() != parser2.size()) {
        return false;
    }
    Iterator<String> it2 = parser2.iterator();
    for (String item : parser1) {
        int index1 = getCanonicalIndex(item, false);
        String item2 = it2.next(); // same length so safe
        int index2 = getCanonicalIndex(item2, false);
        if (types[index1][1] != types[index2][1]) {
            return false;
        }
    }
    return true;
}
 
源代码6 项目: kylin   文件: TrieDictionaryTest.java
private static void benchmarkStringDictionary(Iterable<String> str) throws IOException {
    TrieDictionaryBuilder<String> b = newDictBuilder(str);
    b.stats().print();
    TrieDictionary<String> dict = b.build(0);

    TreeSet<String> set = new TreeSet<String>();
    for (String s : str) {
        set.add(s);
    }

    // prepare id==>value array and value==>id map
    HashMap<String, Integer> map = new HashMap<String, Integer>();
    String[] strArray = new String[set.size()];
    byte[][] array = new byte[set.size()][];
    Iterator<String> it = set.iterator();
    for (int id = 0; it.hasNext(); id++) {
        String value = it.next();
        map.put(value, id);
        strArray[id] = value;
        array[id] = value.getBytes("UTF-8");
    }

    // System.out.println("Dict size in bytes:  " +
    // MemoryUtil.deepMemoryUsageOf(dict));
    // System.out.println("Map size in bytes:   " +
    // MemoryUtil.deepMemoryUsageOf(map));
    // System.out.println("Array size in bytes: " +
    // MemoryUtil.deepMemoryUsageOf(strArray));

    // warm-up, said that code only got JIT after run 1k-10k times,
    // following jvm options may help
    // -XX:CompileThreshold=1500
    // -XX:+PrintCompilation
    System.out.println("Benchmark awaitig...");
    benchmark("Warm up", dict, set, map, strArray, array);
    benchmark("Benchmark", dict, set, map, strArray, array);
}
 
源代码7 项目: MorphoLibJ   文件: LabelImages.java
/**
   * Returns the set of unique labels existing in the given stack, excluding 
   * the value zero (used for background).
* 
* @param image
*            a 3D label image
* @return the list of unique labels present in image (without background)
   */
  public final static int[] findAllLabels(ImageStack image) 
  {
      int sizeX = image.getWidth();
      int sizeY = image.getHeight();
      int sizeZ = image.getSize();
      
      TreeSet<Integer> labels = new TreeSet<Integer> ();
      
      // iterate on image pixels
      for (int z = 0; z < sizeZ; z++) 
      {
      	for (int y = 0; y < sizeY; y++)  
      	{
      		for (int x = 0; x < sizeX; x++)
      		{
      			labels.add((int) image.getVoxel(x, y, z));
      		}
      	}
      }
      
      // remove 0 if it exists
      if (labels.contains(0))
          labels.remove(0);
      
      // convert to array of integers
      int[] array = new int[labels.size()];
      Iterator<Integer> iterator = labels.iterator();
      for (int i = 0; i < labels.size(); i++) 
          array[i] = iterator.next();
      
      return array;
  }
 
源代码8 项目: mzmine3   文件: HMDBGateway.java
public String[] findCompounds(double mass, MZTolerance mzTolerance, int numOfResults,
    ParameterSet parameters) throws IOException {

  Range<Double> toleranceRange = mzTolerance.getToleranceRange(mass);

  String queryAddress = hmdbSeachAddress + "&query_from=" + toleranceRange.lowerEndpoint()
      + "&query_to=" + toleranceRange.upperEndpoint();

  URL queryURL = new URL(queryAddress);

  // Submit the query
  logger.finest("Loading URL " + queryAddress);
  String queryResult = InetUtils.retrieveData(queryURL);

  // Organize the IDs as a TreeSet to keep them sorted
  TreeSet<String> results = new TreeSet<String>();

  // Find IDs in the HTML data
  Pattern pat = Pattern.compile("metabolites/(HMDB[0-9]{5,})");
  Matcher matcher = pat.matcher(queryResult);
  while (matcher.find()) {
    String hmdbID = matcher.group(1);
    results.add(hmdbID);
  }

  // Remove all except first numOfResults IDs. The reason why we first
  // retrieve all results and then remove those above numOfResults is to
  // keep the lowest HDMB IDs - these may be the most interesting ones.
  while (results.size() > numOfResults) {
    String lastItem = results.last();
    results.remove(lastItem);
  }

  return results.toArray(new String[0]);

}
 
源代码9 项目: scifio   文件: TiffSaver.java
public void writeIFD(final IFD ifd, final long nextOffset)
		throws FormatException, IOException
	{
		final TreeSet<Integer> keys = new TreeSet<>(ifd.keySet());
		int keyCount = keys.size();

		if (ifd.containsKey(IFD.LITTLE_ENDIAN)) keyCount--;
		if (ifd.containsKey(IFD.BIG_TIFF)) keyCount--;
		if (ifd.containsKey(IFD.REUSE)) keyCount--;

		final long fp = out.offset();
		final int bytesPerEntry = bigTiff ? TiffConstants.BIG_TIFF_BYTES_PER_ENTRY
			: TiffConstants.BYTES_PER_ENTRY;
		final int ifdBytes = (bigTiff ? 16 : 6) + bytesPerEntry * keyCount;

		if (bigTiff) out.writeLong(keyCount);
		else out.writeShort(keyCount);

		final BytesLocation extra = new BytesLocation(0); // NB: autoresizes
		try (final DataHandle<Location> extraHandle = dataHandleService.create(
			extra))
		{
			for (final Integer key : keys) {
				if (key.equals(IFD.LITTLE_ENDIAN) || key.equals(IFD.BIG_TIFF) || key
					.equals(IFD.REUSE)) continue;

				final Object value = ifd.get(key);
				writeIFDValue(extraHandle, ifdBytes + fp, key.intValue(), value);
			}

//			if (bigTiff) out.seek(out.offset());

			writeIntValue(out, nextOffset);
			final int ifdLen = (int) extraHandle.offset();
			extraHandle.seek(0l);
			DataHandles.copy(extraHandle, out, ifdLen);
		}
	}
 
源代码10 项目: java-technology-stack   文件: Solution.java
public int findCircleNum(int[][] M) {

        int n = M.length;
        UnionFind2 uf = new UnionFind2(n);
        for(int i = 0 ; i < n ; i ++)
            for(int j = 0 ; j < i ; j ++)
                if(M[i][j] == 1)
                    uf.unionElements(i, j);

        TreeSet<Integer> set = new TreeSet<>();
        for(int i = 0 ; i < n ; i ++)
            set.add(uf.find(i));
        return set.size();
    }
 
源代码11 项目: Kylin   文件: TrieDictionaryTest.java
private static void benchmarkStringDictionary(ArrayList<String> str) throws UnsupportedEncodingException {
    TrieDictionaryBuilder<String> b = newDictBuilder(str);
    b.stats().print();
    TrieDictionary<String> dict = b.build(0);

    TreeSet<String> set = new TreeSet<String>();
    for (String s : str) {
        set.add(s);
    }

    // prepare id==>value array and value==>id map
    HashMap<String, Integer> map = new HashMap<String, Integer>();
    String[] strArray = new String[set.size()];
    byte[][] array = new byte[set.size()][];
    Iterator<String> it = set.iterator();
    for (int id = 0; it.hasNext(); id++) {
        String value = it.next();
        map.put(value, id);
        strArray[id] = value;
        array[id] = value.getBytes("UTF-8");
    }

    // System.out.println("Dict size in bytes:  " +
    // MemoryUtil.deepMemoryUsageOf(dict));
    // System.out.println("Map size in bytes:   " +
    // MemoryUtil.deepMemoryUsageOf(map));
    // System.out.println("Array size in bytes: " +
    // MemoryUtil.deepMemoryUsageOf(strArray));

    // warm-up, said that code only got JIT after run 1k-10k times,
    // following jvm options may help
    // -XX:CompileThreshold=1500
    // -XX:+PrintCompilation
    benchmark("Warm up", dict, set, map, strArray, array);
    benchmark("Benchmark", dict, set, map, strArray, array);
}
 
源代码12 项目: spotbugs   文件: FractionalMultiset.java
@SuppressFBWarnings("DMI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS")
public Iterable<Map.Entry<K, Double>> entriesInIncreasingOrder() {
    TreeSet<Map.Entry<K, Double>> result = new TreeSet<>(new DecreasingOrderEntryComparator<K>());
    result.addAll(map.entrySet());
    if (result.size() != map.size()) {
        throw new IllegalStateException("Map " + map.getClass().getSimpleName()
                + " reuses Map.Entry objects; entrySet can't be passed to addAll");
    }
    return result;
}
 
源代码13 项目: unitime   文件: ExamEditAjax.java
protected void coumputeClasses(String schedulingSubpartId, String courseId, PrintWriter out) throws Exception {
    if (schedulingSubpartId==null || schedulingSubpartId.length()==0 || schedulingSubpartId.equals(Preference.BLANK_PREF_VALUE)) {
        print(out, "-1", "N/A");
        return;
    }
    SchedulingSubpart subpart = (Long.parseLong(schedulingSubpartId)>0?new SchedulingSubpartDAO().get(Long.valueOf(schedulingSubpartId)):null);
    if (subpart==null) {
        print(out, "-1", "N/A");
        return;
    }
    CourseOffering co = null;
    if (courseId != null && !courseId.isEmpty()) {
    	co = CourseOfferingDAO.getInstance().get(Long.valueOf(courseId));
    }
    TreeSet classes = new TreeSet(new ClassComparator(ClassComparator.COMPARE_BY_HIERARCHY));
    classes.addAll(new Class_DAO().
        getSession().
        createQuery("select distinct c from Class_ c "+
                "where c.schedulingSubpart.uniqueId=:schedulingSubpartId").
        setFetchSize(200).
        setCacheable(true).
        setLong("schedulingSubpartId", Long.parseLong(schedulingSubpartId)).
        list());
    if (classes.size()>1)
        print(out, "-1", "-");
    for (Iterator i=classes.iterator();i.hasNext();) {
        Class_ c = (Class_)i.next();
        String extId = c.getClassSuffix(co);
        print(out, c.getUniqueId().toString(), c.getSectionNumberString() + (extId == null || extId.isEmpty() || extId.equalsIgnoreCase(c.getSectionNumberString()) ? "" : " - " + extId)); 
    }
}
 
源代码14 项目: MorphoLibJ   文件: LabelImages.java
private static final int[] findBorderLabels(ImageProcessor image) 
{
	int sizeX = image.getWidth();
	int sizeY = image.getHeight();
	
	TreeSet<Integer> labelSet = new TreeSet<Integer>();

	// find labels in top and bottom borders
	for (int x = 0; x < sizeX; x++)
	{
		labelSet.add((int) image.getf(x, 0));
		labelSet.add((int) image.getf(x, sizeY - 1));
	}

	// find labels in left and right borders
	for (int y = 0; y < sizeY; y++) 
	{
		labelSet.add((int) image.getf(0, y));
		labelSet.add((int) image.getf(sizeX - 1, y));
	}

	// remove label for the background
	labelSet.remove(0);
	
	// convert to an array of int
	int[] labels = new int[labelSet.size()];
	int i = 0 ;
	Iterator<Integer> iter = labelSet.iterator();
	while(iter.hasNext()) 
	{
		labels[i++] = (int) iter.next();
	}
	
	return labels;
}
 
源代码15 项目: bbs   文件: ColumnManage.java
/**
 * 添加栏目
 * @param column
 * @param dirName
 * @return
 */
public Integer addColumn(Column column,String dirName){
	List<Column> columnList = columnList(dirName);
	TreeSet<Integer> columnIdList = this.columnIdList(columnList,new TreeSet<Integer>());
	//最大号码
	int maxId = 0;
	if(columnIdList != null && columnIdList.size() >0){
		maxId = columnIdList.last();
	}
	maxId++;
	column.setId(maxId);
	if(column.getLinkMode().equals(4)){
		column.setUrl("column/"+maxId);
	}
	
	
	if(column.getParentId() >0){//有父栏目
		this.addColumnIdList(columnList,column);
	}else{
		columnList.add(column);
	}
	
	//栏目排序
	this.columnSort(columnList);
	int i = templateService.updateColumn(JsonUtils.toJSONString(columnList), dirName);
	if(i >0){
		return maxId;
	}
	return -1;
}
 
/**
 * 欠けているカラム番号がある場合、その番号を持つダミーのカラムを追加する。
 * @param beanType Beanタイプ
 * @param list カラム情報の一覧
 * @param partialAnno Beanに設定されているアノテーション{@link CsvPartial}の情報。
 * @param suppliedHeaders 提供されたヘッダー。提供されてない場合は、長さ0の配列。
 * @return
 */
public static TreeSet<Integer> supplyLackedNumberMappingColumn(final Class<?> beanType, final List<ColumnMapping> list,
        final Optional<CsvPartial> partialAnno, final String[] suppliedHeaders) {
    
    final TreeSet<Integer> checkedNumber = list.stream()
            .filter(col -> col.isDeterminedNumber())
            .map(col -> col.getNumber())
            .collect(Collectors.toCollection(TreeSet::new));
    
    // 定義されている列番号の最大値
    final int maxColumnNumber = checkedNumber.last();
    
    // Beanに定義されていない欠けているカラム番号の取得
    final TreeSet<Integer> lackedNumbers = new TreeSet<Integer>();
    for(int i=1; i <= maxColumnNumber; i++) {
        if(!checkedNumber.contains(i)) {
            lackedNumbers.add(i);
        }
    }
    
    // 定義されているカラム番号より、大きなカラム番号を持つカラム情報の補足
    if(partialAnno.isPresent()) {
        
        final int partialColumnSize = partialAnno.get().columnSize();
        if(maxColumnNumber > partialColumnSize) {
            throw new SuperCsvInvalidAnnotationException(partialAnno.get(), MessageBuilder.create("anno.CsvPartial.columSizeMin")
                    .var("property", beanType.getName())
                    .var("columnSize", partialColumnSize)
                    .var("maxColumnNumber", maxColumnNumber)
                    .format());
            
        }
        
        if(maxColumnNumber < partialColumnSize) {
            for(int i= maxColumnNumber+1; i <= partialColumnSize; i++) {
                lackedNumbers.add(i);
            }
        }
        
    }
    
    // 不足分のカラムがある場合は、部分的な読み書き用カラムとして追加する
    if(lackedNumbers.size() > 0) {
        
        for(int number : lackedNumbers) {
            list.add(createPartialColumnMapping(number, partialAnno, getSuppliedHeaders(suppliedHeaders, number)));
        }
        
        list.sort(null);
    }
    
    return lackedNumbers;
    
}
 
源代码17 项目: jatecs   文件: SMOTE.java
protected static HashMap<Integer, List<DocSim>> computeNNfaster(IIndex index, DocSet forDocuments, int k) {
	int nD=index.getDocumentDB().getDocumentsCount();
	SparseMatrix _distcache=new SparseMatrix(nD, nD);
	
	HashMap<Integer, List<DocSim>> nearest_neigbours=new HashMap<>();
	
	List<Integer> alldocuments=DocSet.genDocset(index.getDocumentDB()).asList();
	
	IndexVectorizer docvectorizer = new IndexVectorizer(index);
	HashMap<Integer, SparseVector> docVector = new HashMap<>();
	for(int docid:alldocuments){
		docVector.put(docid, docvectorizer.getDocumentWeights(docid));
	}
	
	List<Integer> doclist=forDocuments.asList();
	int progress=0;
	int totalsteps=doclist.size();
	JatecsLogger.status().println("Knn for " + totalsteps + " documents: ");
	for(int docID_i : doclist){
		TreeSet<DocSim> neighbours = new TreeSet<DocSim>();
		
		double distThreshold = Double.MAX_VALUE;
		SparseVector docvec_i=docVector.get(docID_i);
		
		for(int docID_j : alldocuments){
			if(docID_i==docID_j) continue;
			
			double distance = _distcache.get(Math.min(docID_i, docID_j), Math.max(docID_i, docID_j));
			if(distance==0){				
				distance = euclideanSquaredDistanceThresholded(docvec_i, docVector.get(docID_j), distThreshold);
				_distcache.set(Math.min(docID_i, docID_j), Math.max(docID_i, docID_j), distance);
			}
				
			neighbours.add(new DocSim(docID_j, distance));
			if(neighbours.size()>k){
				neighbours.pollLast();
				distThreshold = Math.min(neighbours.last().distance, distThreshold);
			}
		}

		nearest_neigbours.put(docID_i, new ArrayList<DocSim>(neighbours));
		
		if(progress++%(Math.max(totalsteps/10,1))==0)
			JatecsLogger.status().print("..."+(progress*100/totalsteps)+"%");
	}
	JatecsLogger.status().println("");
	
	return nearest_neigbours;
}
 
源代码18 项目: unitime   文件: RoomGroupAddAction.java
/** 
 * Method execute
 * @param mapping
 * @param form
 * @param request
 * @param response
 * @return ActionForward
 */
public ActionForward execute(
	ActionMapping mapping,
	ActionForm form,
	HttpServletRequest request,
	HttpServletResponse response) throws Exception{
	RoomGroupEditForm roomGroupEditForm = (RoomGroupEditForm) form;
	
	MessageResources rsc = getResources(request);
	String doit = roomGroupEditForm.getDoit();
	
	if (doit != null) {
		//add new
		if(doit.equals(rsc.getMessage("button.addNew"))) {
			ActionMessages errors = new ActionMessages();
			errors = roomGroupEditForm.validate(mapping, request);
	        if(errors.size()==0) {
	        	save(mapping, roomGroupEditForm, request, response);
				return mapping.findForward("showRoomGroupList");
	        } else {
	        	saveErrors(request, errors);
	        }
		}
		
		//return to room list
		if(doit.equals(rsc.getMessage("button.returnToRoomGroupList"))) {
			return mapping.findForward("showRoomGroupList");
		}
	}
	
	//get depts owned by user
	LookupTables.setupDepartments(request, sessionContext, false);
	
       //set default department
	TreeSet<Department> departments = Department.getUserDepartments(sessionContext.getUser());
       if (departments.size() == 1) {
       	roomGroupEditForm.setDeptCode(departments.first().getDeptCode());
       } else {
       	String deptCode = (String)sessionContext.getAttribute(SessionAttribute.DepartmentCodeRoom);
       	if (deptCode != null && !deptCode.isEmpty() && !deptCode.equals("All") && !deptCode.matches("Exam[0-9]*"))
       		roomGroupEditForm.setDeptCode(deptCode);
	}
	
	if (roomGroupEditForm.getDeptCode() == null || roomGroupEditForm.getDeptCode().isEmpty() || roomGroupEditForm.getDeptCode().matches("Exam[0-9]*") ||
		!sessionContext.hasPermission(roomGroupEditForm.getDeptCode(), "Department", Right.DepartmentRoomGroupAdd)) {
		sessionContext.checkPermission(Right.GlobalRoomGroupAdd);
		roomGroupEditForm.setGlobal(true);
	} else {
		sessionContext.checkPermission(roomGroupEditForm.getDeptCode(), "Department", Right.DepartmentRoomGroupAdd);
		roomGroupEditForm.setGlobal(false);
	}
	
	roomGroupEditForm.setSessionId(sessionContext.getUser().getCurrentAcademicSessionId());
	
	return mapping.findForward("showAdd");
}
 
/**
 * Searches a collection of Strings for those which are within a given edit distance from a particular String.
 * 
 * This version of fuzzy search uses a pre-computed map of transitions, and is the fastest method for max 
 * edit distances less than or equal 2. Greater max edit distances require huge amounts of memory and 
 * are not guaranteed to be faster than a non-automaton approach, so use in those cases is discouraged.
 
 * @param maxEditDistance       an int denoting the maximum amount of edit operations that can separate
 *                              a String in the to-be-searched collection with the String of interest
 * @param automatonString       the String that all edit-distance calculations are to be carried out in relation to
 * @param mdag                  an MDAG containing the set of Strings to be processed against {@code automatonString}
 * @return                      a LinkedList containing all the Strings in {@code mdag} that are at most
 *                              {@code maxEditDistance} away from {@code automatonString}
 */
public static LinkedList<String> tableFuzzySearch(int maxEditDistance, String automatonString, MDAG mdag)
{
    //LinkedList which will contain Strings in mdag that are within maxEditDistance of automatonString
    LinkedList<String> resultStringLinkedList = new LinkedList<String>();
    
    //HashMap containing the transition relationships between the parametric states of an automaton with maxEditDistance
    createParametricStateTransitionMap(maxEditDistance);
    HashMap<ParametricState, HashMap<AugBitSet, ParametricState>> transitionHashMap = transitionHashMapContainerHashMap.get(maxEditDistance);
    
    //Stack to store collections of objects which collectively represent steps in the search process
    Stack<Object[]> processingStepStack = new Stack<Object[]>();

    boolean mdagIsSimplified = mdag.getSourceNode().getClass().equals(SimpleMDAGNode.class);
    SimpleMDAGNode[] simpleMDAGArray = mdag.getSimpleMDAGArray();
    
    //Push onto processingStepStack the collection of objects which represent the start step of the search process
    processingStepStack.push(createProcessingStepStackEntry("", mdag.getSourceNode(), initialState, new ParametricState(initialState)));
    
    //Retrieve the set of characters composing the Strings in mdag
    TreeSet<Character> charTreeSet = mdag.getTransitionLabelSet();
    int charCount = charTreeSet.size();
    /////
    
    //Iterate through charTreeSet, inserting each char in to charArray
    int counter = 0;
    char[] charArray = new char[charCount];
    for(Character c : charTreeSet) charArray[counter++] = c.charValue();
    /////
    
    //Transition through the MDAG and the automaton represented by transitionHashMap in-sync, adding to 
    //resultStringLinkedList the char sequences that lead to both an accept node (MDAG) and accept state (transition map)
    while(!processingStepStack.isEmpty())
    {
        //Pop the processing step at the top of the stack and re-cast its contents
        Object[] currentProcessingStepDataArray = processingStepStack.pop(); 
        
        Object currentNodeObj = currentProcessingStepDataArray[1];
        State currentState = (State)currentProcessingStepDataArray[2];
        ParametricState currentParametricState = (ParametricState)currentProcessingStepDataArray[3];
        /////
        
        //Loop through the chars in charArray, using each to transition the node & state in the
        //processing step at the top of the stack. If both the node and state have valid
        //transitions on a particular char, push the resulting transition String, node,
        //and State on the top of the stack
        for(int i = 0; i < charCount; i++)
        {
            char currentChar = charArray[i];

            //Execute a transition on the current MDAG node using currentChar     
            Object transitionNode = (mdagIsSimplified ? ((SimpleMDAGNode)currentNodeObj).transition(simpleMDAGArray, currentChar) : ((MDAGNode)currentNodeObj).transition(currentChar));
            
            if(transitionNode != null)
            {
                //Get currentState's relevant subword (with respect to currentChar) and  
                //use it to get the parametric version of the transition's result State
                AugBitSet rscv = currentState.getRelevantSubwordCharacteristicVector(maxEditDistance, automatonString, currentChar);  
                ParametricState transitionParametricState = transitionHashMap.get(currentParametricState).get(rscv);
                /////

                if(transitionParametricState != null)
                {
                    //Use transitionParametricState to create the actual State that is the result of the transition
                    State transitionState = transitionParametricState.createActualState(currentState.getMinimalBoundary() + transitionParametricState.getTransitionBoundaryOffset());
                    
                    String transitionPathString = (String)currentProcessingStepDataArray[0] + currentChar;
                    
                    //Push the resulting processing step on to the top of processingStepStack
                    processingStepStack.push(createProcessingStepStackEntry(transitionPathString, transitionNode, transitionState, transitionParametricState));

                    //If both transitionNode and transitionState are "accepting", add the sequence of chars that lead to them to resultStringLinkedList
                    if(MDAG.isAcceptNode(transitionNode) && isAcceptState(transitionState, automatonString.length(), maxEditDistance))
                        resultStringLinkedList.add(transitionPathString);
                }
            }
        }
        /////
    }
    /////
 
    return resultStringLinkedList;
}
 
源代码20 项目: ignite   文件: GridSqlQuerySplitter.java
/**
 * @param sqlQry Query.
 * @param qryAst Select AST.
 * @param paramsCnt Number of parameters.
 */
private static void setupParameters(GridCacheSqlQuery sqlQry, GridSqlQuery qryAst, int paramsCnt) {
    TreeSet<Integer> paramIdxs = new TreeSet<>();

    SplitterUtils.findParamsQuery(qryAst, paramsCnt, paramIdxs);

    int[] paramIdxsArr = new int[paramIdxs.size()];

    int i = 0;

    for (Integer paramIdx : paramIdxs)
        paramIdxsArr[i++] = paramIdx;

    sqlQry.parameterIndexes(paramIdxsArr);
}