Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!aioe.org!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: blmblm@myrealbox.com Newsgroups: comp.lang.java.programmer Subject: Re: Passing a Method Name to a Method, Redux Date: 5 Jul 2011 19:07:37 GMT Organization: None Lines: 93 Message-ID: <97h5npFhaeU1@mid.individual.net> References: <97cq72FbqnU1@mid.individual.net> <20c411d9-8955-4f4c-9a78-fea7540ed9a1@p10g2000prf.googlegroups.com> X-Trace: individual.net VvTaJGf6iJEHYvc83xgwoQfmUIKOMtSWCv/NrZxZhY9/jUZsED X-Orig-Path: not-for-mail Cancel-Lock: sha1:7QoeTPumXq7oUeUY8p+koZ05cgk= X-Newsreader: trn 4.0-test76 (Apr 2, 2001) Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:5861 In article <20c411d9-8955-4f4c-9a78-fea7540ed9a1@p10g2000prf.googlegroups.com>, lewbloch wrote: > On Jul 3, 8:26 pm, blm...@myrealbox.com > wrote: > > In article , > > Gene Wirchenko wrote: [ snip ] > > Another "no separate method" approach would be to use the String > > class's indexOf method: > > > > static boolean StringLibSearch > > ( > > char CurrChar > > ) > > { > > return IdentChars.indexOf(CurrChar) >= 0; > > } > > > > I added this to your benchmark suite and found it to give performance > > comparable to the TreeSet implementation (indeed, usually it was a > > bit faster). The overhead of building the TreeSet probably doesn't > > matter in the grand scheme of things, and probably it also doesn't > > matter a lot that every call to the TreeSet's "contains" method > > (AFAIK) has to convert a character primitive to a Character object, > > but -- . > > > > But if you're going to use a Set, why a TreeSet? As best I can tell, > > you don't use/need the sorted-ness it provides. Just out of curiosity, > > I also added to your benchmark suite something that declares the set > > as a Set and creates it as an instance of HashSet, and the resulting > > code was noticeably faster than any of the other alternatives. > > > > And finally, I wondered how all of these methods compared to > > something using regular expressions (the java.util.regex classes), so > > i tried that too, replacing your whole parse code with the following: > > > > import java.util.regex.*; > > > > // .... > > > > static Pattern IdentRegexPattern=Pattern.compile("[" + IdentChars + "]+"); > > > > // .... > > > > // code to be called repeatedly from timing loop > > static void ParseRegex() > > { > > Matcher IdentMatcher = IdentRegexPattern.matcher(cParseString); > > String sIdent; > > while (IdentMatcher.find()) > > { > > sIdent = IdentMatcher.group(); > > if (nRepetitions==1) > > System.out.println(sIdent); > > } > > } > > > > // .... > > > > This was a clear winner (with regard to performance) on the system > > where I measured performance, *unless* I ran the tests with the > > "-server" flag, in which case it took second place, behind the > > HashSet-based approach. As I understand things, though, the > > "-server" flag results in the compiler doing more to try to optimize > > the code, including being more aggressive about eliminating dead > > code, so I'm not entirely confident about the results I'm getting > > being meaningful. > > > > (Probably your actual code needs to do something other than > > finding and printing identifiers, so the above code would need > > some adjustment. Still, if you like regular expressions, it's > > another possibility, maybe .... ) > > > > [ snip ] > > > > Your points are excellent, but the ongoing violations of the naming > conventions is making my brain hurt. Can't we please revert to > conformant names in our replies at least? Well .... I guess I figure it's a choice between two things that seem desirable -- (1) working in with the conventions of the code I'm modifying and (2) applying the conventions used by most Java programmers. I chose the former, though it rather makes my brain hurt as well. :-)? -- B. L. Massingill ObDisclaimer: I don't speak for my employers; they return the favor.