Листинг 9.18. Метод для сортировки и другие служебные методы (NewsModel.java)
public void shellSort (String[] srted ) { // h is the separation between items we compare. int h = 1; while ( h < srted.length ) { h = 3 * h + 1; } // now h is optimum while ( h > 0 ) { h = (h - 1)/3; for ( int i = h; i < srted.length; ++i ) { String item = srted[i]; int j=0; for ( j = i - h; j > = 0 && compare( srted[j], item ) < 0; j -= h ) { srted[j+h] = srted[j]; } // end inner for srted[j+h] = item; } // end outer for } // end while } // end sort
// return -1 if a < b , 0 if equal, +1 if a > b int compare(String a, String b ){ String aa = a.toUpperCase() ; String bb = b.toUpperCase() ; return bb.compareTo( aa ) ; }
public String toString() { StringBuffer sb = new StringBuffer( "NewsModel " ); if( !usable ){ sb.append("is not usable due to "); sb.append( lastErr ); return sb.toString(); } sb.append("count of articles "); sb.append( Integer.toString( articleNodeList.getLength()) ); sb.append("Unique clusters " + clusterHash.size() ); sb.append("\n"); Enumeration keys = clusterHash.keys(); while( keys.hasMoreElements() ){ String key = (String)keys.nextElement(); Vector v = (Vector)clusterHash.get( key ); sb.append(" Topic: " ); sb.append( key ) ; sb.append(" has " ) ; sb.append(Integer.toString( v.size())); sb.append("\n"); } return sb.toString(); } }