Mike, Why not implement subSequence as 'java.nio.CharBuffer.wrap(data, 
beginIndex, endIndex).asReadOnlyBuffer()' ?  Easy to implement and test.  The 
nice thing is that parsers would know what a 'CharBuffer' vs. a sub sequence 
String internal class. Jason
 > Subject: String.subSequence and CR#6924259: Remove offset and count fields   
 > from java.lang.String
> From: mike.dui...@oracle.com
> Date: Fri, 22 Jun 2012 15:15:40 -0700
> To: peter.lev...@gmail.com
> CC: core-libs-dev@openjdk.java.net
> 
> I've made a test implementation of subSequence() utilizing an inner class 
> with offset and count fields to try to understand all the parts that would be 
> impacted. My observations thus far:
> 
> - The specification of the subSequence() method is currently too specific. It 
> says that the result is a subString(). This would no longer be true. 
> Hopefully nobody assumed that this meant they could cast the result to 
> String. I know, why would you if you can just call subString() instead? I've 
> learned to assume that somebody somewhere does always does the most 
> unexpected thing.
> - The CharSequences returned by subSequence would follow only the general 
> CharSequence rules for equals()/hashCode(). Any current usages of the result 
> of subSequence for equals() or hashing, even though it's not advised, would 
> break. We could add equals() and hashCode() implementations to the 
> CharSequence returned but they would probably be expensive.
> - In general I wonder if parsers will be satisfied with a CharSequence that 
> only implements identity equals().
> - I also worry about applications that currently do use subSequence currently 
> and which will fail when the result is not a String instance as 
> String.equals() will return false for all CharSequences that aren't Strings. 
> ie. CharSequence token = line.subSequence(line, start, end); if 
> (keyword.equals(token)) ... This would now fail.
> 
> At this point I wonder if this is a feature worth pursuing.
> 
> Mike
> 
> On Jun 3 2012, at 13:44 , Peter Levart wrote:
> 
> > On Thursday, May 31, 2012 03:22:35 AM mike.dui...@oracle.com wrote:
> >> Changeset: 2c773daa825d
> >> Author:    mduigou
> >> Date:      2012-05-17 10:06 -0700
> >> URL:       http://hg.openjdk.java.net/jdk8/tl/jdk/rev/2c773daa825d
> >> 
> >> 6924259: Remove offset and count fields from java.lang.String
> >> Summary: Removes the use of shared character array buffers by String along
> >> with the two fields needed to support the use of shared buffers.
> > 
> > Wow, that's quite a change.
> > 
> > So .substring() is not O(1) any more?
> > 
> > Doesn't this have impact on the performance of parsers and such that rely 
> > on 
> > the performance caracteristics of the .substring() ?
> > 
> > Have you considered then implementing .subSequence() not in terms of just 
> > delegating to .substring() but returning a special CharSequence view over 
> > the 
> > chars of the sub-sequence?
> 
                                          

Reply via email to