From 4d74c658d90e168f5bcbb90e6c8f89f93196d41f Mon Sep 17 00:00:00 2001 From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04> Date: Mon, 20 Dec 2004 15:18:57 +0000 Subject: [PATCH] optimise and format git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@2144 ee4ac58c-ac51-4696-9907-e4b3aa274f04 --- uk/ac/sanger/artemis/util/StringVector.java | 262 +++++++++++--------- 1 file changed, 147 insertions(+), 115 deletions(-) diff --git a/uk/ac/sanger/artemis/util/StringVector.java b/uk/ac/sanger/artemis/util/StringVector.java index 05777638c..7a34c637a 100644 --- a/uk/ac/sanger/artemis/util/StringVector.java +++ b/uk/ac/sanger/artemis/util/StringVector.java @@ -20,13 +20,13 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/util/StringVector.java,v 1.1 2004-06-09 09:53:11 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/util/StringVector.java,v 1.2 2004-12-20 15:18:57 tjc Exp $ */ package uk.ac.sanger.artemis.util; import java.util.Vector; -import java.util.StringTokenizer; +//import java.util.StringTokenizer; import java.util.Collections; import java.util.Collection; import java.util.Comparator; @@ -35,105 +35,118 @@ import java.util.Comparator; * This class implements a Vector of String objects. * * @author Kim Rutherford - * @version $Id: StringVector.java,v 1.1 2004-06-09 09:53:11 tjc Exp $ + * @version $Id: StringVector.java,v 1.2 2004-12-20 15:18:57 tjc Exp $ **/ -public class StringVector { +public class StringVector +{ + /** Storage for String objects. */ + private Vector vector; + /** * Create a new vector of String objects. **/ - public StringVector () { - vector = new Vector (); + public StringVector() + { + vector = new Vector(2); } /** * Create a new vector which contains the given Strings. **/ - public StringVector (final String [] new_strings) { - vector = new Vector (); - for (int i = 0 ; i < new_strings.length ; ++i) { - add (new_strings[i]); - } + public StringVector(final String[] new_strings) + { + int len = new_strings.length; + vector = new Vector(len); + for(int i = 0; i < len; ++i) + add(new_strings[i]); } /** * Create a new vector which contains the given Strings. **/ - public StringVector (final StringVector new_strings) { - vector = new Vector (); - for (int i = 0 ; i < new_strings.size () ; ++i) { - add (new_strings.elementAt (i)); - } + public StringVector(final StringVector new_strings) + { + int len = new_strings.size(); + vector = new Vector(len); + for(int i = 0; i < len; ++i) + add(new_strings.elementAt (i)); } /** * Create a new vector which contains only the given String. **/ - public StringVector (final String new_string) { - vector = new Vector (); - add (new_string); + public StringVector(final String new_string) + { + vector = new Vector(); + add(new_string); } /** - * Performs the same function as Vector.addElement () + * Performs the same function as Vector.addElement() **/ - public void add (final String node) { - vector.addElement (node); + public void add(final String node) + { + vector.addElement(node); } /** - * Call add () on each of the String objects in the given StringVector. + * Call add() on each of the String objects in the given StringVector. **/ - public void add (final StringVector new_strings) { - for (int i = 0 ; i < new_strings.size () ; ++i) { - add (new_strings.elementAt (i)); - } + public void add(final StringVector new_strings) + { + for (int i = 0; i < new_strings.size(); ++i) + add (new_strings.elementAt(i)); } /** - * Performs the same function as Vector.removeElement () + * Performs the same function as Vector.removeElement() **/ - public boolean remove (final String node) { - return vector.removeElement (node); + public boolean remove(final String node) + { + return vector.removeElement(node); } /** * Return the elements of the Vector as an String array. **/ - public String [] getArray () { - final String [] return_array = new String [size ()]; - - vector.copyInto (return_array); - + public String[] getArray() + { + final String[] return_array = new String[size()]; + vector.copyInto(return_array); return return_array; } /** * Return the elements of the Vector as Collection. **/ - public Collection asCollection () { - return (Collection) vector.clone (); + public Collection asCollection() + { + return (Collection)vector.clone(); } /** - * Performs the same function as Vector.elementAt () + * Performs the same function as Vector.elementAt() **/ - public String elementAt (final int index) { - return (String) vector.elementAt (index); + public String elementAt(final int index) + { + return (String)vector.elementAt(index); } /** * Performs the same function as Vector.setElementAt () **/ - public void setElementAt (final String string, final int index) { - vector.setElementAt (string, index); + public void setElementAt(final String string, final int index) + { + vector.setElementAt(string, index); } /** * Performs the same function as Vector.size () **/ - public int size () { - return vector.size (); + public int size() + { + return vector.size(); } /** @@ -142,72 +155,62 @@ public class StringVector { * @return the index of the first occurrence of the argument in this * vector; returns -1 if the object is not found. **/ - public int indexOf (final String string) { - return vector.indexOf (string); + public int indexOf(final String string) + { + return vector.indexOf(string); } /** * Return true if this object contains the given String, testing for * equality using the equals method. **/ - public boolean contains (final String string) { - if (indexOf (string) == -1) { + public boolean contains(final String string) + { + if(indexOf(string) == -1) return false; - } else { + else return true; - } } /** * Sorts the elements of the vector using quicksort from the collections * package. */ - public void sort () { - final Comparator comparator = - new Comparator () { - public int compare (Object fst, Object snd) { - if (fst == null) { - if (snd == null) { - return 0; - } else { - return -1; - } - } else { - if (snd == null) { - return 1; - } - } - return ((String) fst).compareTo ((String) snd); + public void sort() + { + final Comparator comparator = new Comparator() + { + public int compare(Object fst, Object snd) + { + if(fst == null) + { + if(snd == null) + return 0; + else + return -1; + } + else + { + if(snd == null) + return 1; } - }; + return ((String)fst).compareTo((String) snd); + } + }; - Collections.sort (vector, comparator); + Collections.sort(vector, comparator); } /** * Return a new copy of this object. **/ - public StringVector copy () { - final StringVector new_string_vector = new StringVector (); - - new_string_vector.vector = (Vector) vector.clone (); - + public StringVector copy() + { + final StringVector new_string_vector = new StringVector(this); +// new_string_vector.vector = (Vector)vector.clone(); return new_string_vector; } - /** - * Return a copy of this vector with all the Strings turned to lower case. - **/ - public StringVector toLowerCase () { - final StringVector return_vector = new StringVector (); - - for (int i = 0; i < size (); ++i) { - return_vector.add (elementAt (i).toLowerCase ()); - } - - return return_vector; - } - /** * Return a StringVector containing the values of the given String after * splitting using the given characters. If the argument String is zero @@ -219,33 +222,49 @@ public class StringVector { * false then the split_characters will be treated as a block (and "foo" * would be returned in the example. **/ - public static StringVector getStrings (final String argument, - final String split_characters, - final boolean keep_zero_char_tokens) { - final StringVector return_vector = new StringVector (); - - final StringTokenizer tokeniser = - new StringTokenizer (argument, split_characters, true); - + public static StringVector getStrings(final String argument, + String split_characters, + final boolean keep_zero_char_tokens) + { + final StringVector return_vector = new StringVector(); String last_value = null; - while (tokeniser.hasMoreTokens ()) { - final String value = tokeniser.nextToken (); + int ind1 = 0; + int ind2; + int argLen = argument.length(); + String value; + + while(ind1 < argLen) + { + ind2 = argument.indexOf(split_characters,ind1); + if(ind2 == ind1) + { + ind1++; + continue; + } + + if(ind2 < 0) + ind2 = argLen; + + value = argument.substring(ind1,ind2); + ind1 = ind2+1; - if (value.length () == 1 && - split_characters.indexOf (value.charAt (0)) != -1) { + if(value.length() == 1 && + split_characters.indexOf(value.charAt(0)) != -1) + { // ignore the split characters - if (keep_zero_char_tokens && - (last_value == null || - last_value != null && last_value.length () == 1 && - split_characters.indexOf (last_value) != -1)) { + if(keep_zero_char_tokens && + (last_value == null || + last_value != null && last_value.length () == 1 && + split_characters.indexOf (last_value) != -1)) + { // we need to add a space because of two split_characters in a row - return_vector.add (""); + return_vector.add(""); } - } else { - return_vector.add (value); - } + } + else + return_vector.add(value); last_value = value; } @@ -259,9 +278,10 @@ public class StringVector { * length or it consists only of the characters used to split, the return * vector will be zero length. **/ - public static StringVector getStrings (final String argument, - final String split_characters) { - return getStrings (argument, split_characters, false); + public static StringVector getStrings(final String argument, + final String split_characters) + { + return getStrings(argument, split_characters, false); } /** @@ -271,12 +291,24 @@ public class StringVector { * String is zero length or it consists only of whitespace, the return * vector will be zero length. **/ - public static StringVector getStrings (final String argument) { - return getStrings (argument, " \t", false); + public static StringVector getStrings(final String argument) + { + return getStrings(argument, " ", false); + } + + public static void main(String args[]) + { + String argument = "a c g t c g c a t c g a c t c"; + long startTime = System.currentTimeMillis(); + + for(int i=0; i<10000000; i++) + { + getStrings(argument, " ", true); + } + + long endTime = System.currentTimeMillis(); + + System.out.println("TIME TAKEN "+ Long.toString(endTime-startTime)); } - /** - * Storage for String objects. - **/ - private Vector vector; } -- GitLab