T - ãã®ã¹ããªããã¬ãŒã¿ããè¿ãããèŠçŽ ã®åpublic interface Spliterator<T>
CollectionãIOãã£ãã«ããžã§ãã¬ãŒã¿é¢æ°ãªã©ã§ãã
ã¹ããªããã¬ãŒã¿ã¯ãèŠçŽ ãåã
ã«ãã©ããŒã¹ããã(tryAdvance())ãé æ¬¡ã«äžæ¬ã§ãã©ããŒã¹ãã(forEachRemaining())ããšãã§ããŸãã
ãŸããã¹ããªããã¬ãŒã¿ã¯ãã®èŠçŽ ã®äžéšãåå²ããŠ(trySplit()ã䜿çš)ã䞊ååŠçã«äœ¿çšããå¥ã®ã¹ããªããã¬ãŒã¿ãäœæããããšãã§ããŸãã åå²ã§ããªãããŸãã¯åå²ãããšãã©ã³ã¹ãå¹çãæªããªããããªã¹ããªããã¬ãŒã¿ã䜿çšããåŠçã§ã¯ãäžŠåæ§ã®å©ç¹ã掻ããããå¯èœæ§ã¯äœããªããŸãã ãã©ããŒã¹ãšåå²ã¯èŠçŽ ã䜿ãæãããŸããåã¹ããªããã¬ãŒã¿ã¯1ã€ã®äžæ¬èšç®ã ãã«åœ¹ç«ã¡ãŸãã
ãŸããã¹ããªããã¬ãŒã¿ã¯ãã®æ§é ããœãŒã¹ãããã³èŠçŽ ã®äžé£ã®ç¹æ§(characteristics() )ããORDEREDãDISTINCTãSORTEDãSIZEDãNONNULLãIMMUTABLEãCONCURRENTããã³SUBSIZEDã®äžããè¿ããŸãã ãããã¯ãã¹ããªããã¬ãŒã¿ã®ã¯ã©ã€ã¢ã³ããèšç®ãå¶åŸ¡ãç¹æ®åããŸãã¯ç°¡çŽ åããããã«äœ¿çšã§ããŸãã ããšãã°ãCollectionã®ã¹ããªããã¬ãŒã¿ã¯SIZEDãå ±åããSetã®ã¹ããªããã¬ãŒã¿ã¯DISTINCTãå ±åããSortedSetã®ã¹ããªããã¬ãŒã¿ã¯SORTEDãå ±åããŸãã ç¹æ§ã¯ãåçŽã«è«çåãåã£ããããã»ã»ãããšããŠå ±åãããŸãã ããã€ãã®ç¹æ§ã¯ãã¡ãœããã®åäœã远å ã§å¶çŽããŸããããšãã°ãORDEREDã®å Žåããã©ããŒã¹ã»ã¡ãœããã¯ãã®ããã¥ã¡ã³ãåãããé åºä»ãã«åŸãå¿
èŠããããŸãã å°æ¥ãæ°ããç¹æ§ãå®çŸ©ãããå¯èœæ§ãããããããªã¹ãã«ãªãå€ã«å®è£
åŽã§æå³ãå²ãåœãŠãªãããã«ããŠãã ããã
IMMUTABLEãŸãã¯CONCURRENTãã¬ããŒãããªãã¹ããªãã¿ã«ã¯ã次ã®ããªã·ãŒã«é¢ããææžåãå¿
èŠã§ã: ã¹ããªãã¿ãã€ã³ãããèŠçŽ ãœãŒã¹ãããã³ãã€ã³ãåŸã«æ€åºãããèŠçŽ ãœãŒã¹ã®æ§é çå¹²æžã®æ€åºã late-bindingã¹ããªãã¿ã¯ãã¹ããªãã¿ã®äœææã§ã¯ãªããæåã®èµ°æ»ãæåã®åå²ããŸãã¯æšå®ãµã€ãºã®æåã®ååãã®æç¹ã§èŠçŽ ã®ãœãŒã¹ã«ãã€ã³ãããŸãã é
å»¶ãã€ã³ãã£ã³ã°ã§ãªãã¹ããªããã¬ãŒã¿ã¯ãæ§ç¯æãŸãã¯ä»»æã®ã¡ãœããã®æåã®åŒåºãæã«èŠçŽ ã®ãœãŒã¹ã«ãã€ã³ãããŸãã ãã€ã³ãã®åã«ãœãŒã¹ã«å ãããã倿Žã¯ãã¹ããªããã¬ãŒã¿ããã©ããŒã¹ããããšãã«åæ ãããŸãã ãã€ã³ãåŸãæ§é çå¹²æžãæ€åºãããå Žåãã¹ããªããã¬ãŒã¿ã¯ãã¹ãã»ãšãã©ãŒãã»ããŒã¹ã§ConcurrentModificationExceptionãã¹ããŒããã¹ãã§ãã ãããè¡ãã¹ããªããã¬ãŒã¿ã¯ãã§ã€ã«ãã¡ã¹ããšåŒã°ããŸãã ã¹ããªããã¬ãŒã¿ã®äžæ¬ãã©ããŒã¹ã»ã¡ãœãã(forEachRemaining())ã¯ããã©ããŒã¹ãæé©åããèŠçŽ ããšã«ãã§ãã¯ããŠããã«å€±æããã®ã§ã¯ãªããã¹ãŠã®èŠçŽ ããã©ããŒã¹ãããåŸã§æ§é çå¹²æžããªããã©ããããã§ãã¯ããããšãã§ããŸãã
ã¹ããªããã¬ãŒã¿ã¯estimateSize()ã¡ãœãããä»ããŠæ®ãã®èŠçŽ æ°ã®æšå®å€ãæäŸã§ããŸãã çæ³çã«ã¯ãSIZEDç¹æ§ã«åæ ããããšããããã®å€ã¯æ£åžžãªãã©ããŒã¹ã§æ€åºãããèŠçŽ ã®æ°ã«æ£ç¢ºã«äžèŽããŸãã ãã ããæ£ç¢ºã«ã¯ããããªããŠãããœãŒã¹ã«å¯ŸããŠå®è¡äžã®åŠçã§æšå®å€ã圹ç«ã€å ŽåããããŸããããšãã°ãæ®ãã®èŠçŽ ãããã«åå²ããæ¹ããããé æ¬¡ãã©ããŒã¹ããæ¹ãããããå€å®ããã®ã«åœ¹ç«ã¡ãŸãã
䞊åã¢ã«ãŽãªãºã ã§ã®æçšæ§ã¯æããã§ãããã¹ããªããã¬ãŒã¿ã¯ã¹ã¬ããã»ãŒããšã¯èŠãªãããŸãããã¹ããªããã¬ãŒã¿ã䜿çšããŠäžŠåã¢ã«ãŽãªãºã ãå®è£
ããå Žåã¯ãäžåºŠã«1ã€ã®ã¹ã¬ããã®ã¿ãã¹ããªããã¬ãŒã¿ã䜿çšããããã«ããŠãã ããã éåžžãããã¯é 次ã¹ã¬ããææã«ãã£ãŠç°¡åã«å®çŸã§ããŸããå€ãã®å Žåãããã¯ååž°çåè§£ã«ãã£ãŠæ©èœããéåžžã®äžŠåã¢ã«ãŽãªãºã ããèªç¶ã«åŸãããçµæã§ãã trySplit()ãåŒã³åºããŠããã¹ã¬ããããè¿ãããã¹ããªããã¬ãŒã¿ãå¥ã®ã¹ã¬ããã«æž¡ããæ¬¡ã«ãã®ã¹ã¬ãããããã®ã¹ããªããã¬ãŒã¿ããã©ããŒã¹ãããããã«åå²ã§ããŸãã 2ã€ä»¥äžã®ã¹ã¬ãããåæã«åãã¹ããªããã¬ãŒã¿ãæäœããå Žåã®ãåå²ããã³ãã©ããŒã¹ã®åäœã¯å®çŸ©ãããŠããŸããã å
ã®ã¹ã¬ããããå¥ã®ã¹ã¬ããã«åŠçã®ããã«ã¹ããªããã¬ãŒã¿ãæž¡ãå Žåã¯ãããããã®èŠçŽ ãtryAdvance()ã§æ¶è²»ãããåã«æž¡ãããšãæåã§ããããã¯ãããã€ãã®ä¿èšŒ(SIZEDã¹ããªããã¬ãŒã¿ã®estimateSize()ã®æ£ç¢ºããªã©)ã¯ãã©ããŒã¹ã®éå§åã«ã®ã¿æå¹ãªããã§ãã
intãlongããã³doubleå€çšã«ããªããã£ãç¹åãããSpliteratorã®ãµãã¿ã€ããçšæãããŠããŸãã tryAdvance(java.util.function.Consumer)ããã³forEachRemaining(java.util.function.Consumer)ã®ãµãã¿ã€ãã®ããã©ã«ãå®è£
ã¯ãããªããã£ãå€ãããã«å¯Ÿå¿ããã©ãããŒã»ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã«ããã¯ã¹åããŸãã ãã®ãããªããã¯ã¹åãè¡ããšãããªããã£ãç¹åã䜿çšããããšã§åŸãããããã©ãŒãã³ã¹äžã®å©ç¹ãèããå ŽåããããŸãã ãã¯ã·ã³ã°ãé¿ããã«ã¯ã察å¿ããããªããã£ãã»ããŒã¹ã»ã¡ãœããã䜿çšããŠãã ããã ããšãã°ãSpliterator.OfInt.tryAdvance(java.util.function.Consumer)ãšSpliterator.OfInt.forEachRemaining(java.util.function.Consumer)ããããSpliterator.OfInt.tryAdvance(java.util.function.IntConsumer)ãšSpliterator.OfInt.forEachRemaining(java.util.function.IntConsumer)ãåªå
çã«äœ¿çšããã¹ãã§ãã ããã¯ã¹åããŒã¹ã®ã¡ãœããtryAdvance()ããã³forEachRemaining()ã䜿çšããŠããªããã£ãå€ããã©ããŒã¹ããå Žåã倿åŸã®ããã¯ã¹åãããå€ãæ€åºãããé åºã¯åœ±é¿ãåããŸããã
Iteratorãªã©ã®ã¹ããªããã¬ãŒã¿ã¯ã1ã€ã®ãœãŒã¹ã®èŠçŽ ããã©ããŒã¹ããããã®ãã®ã§ãã Spliterator APIã¯ãåè§£ãšåäžèŠçŽ å埩åŠçããµããŒãããããšã«ãããé æ¬¡ãã©ããŒã¹ã ãã§ãªãå¹çã®ãã䞊åãã©ããŒã¹ããµããŒãããããã«èšèšãããŸããã ããã«ãã¹ããªããã¬ãŒã¿ãä»ããŠèŠçŽ ã«ã¢ã¯ã»ã¹ããããã®ãããã³ã«ã¯ãèŠçŽ ããšã®ãªãŒããŒããããIteratorãããå°ãããªãããã«èšèšãããŠããŸãããŸããhasNext()ãšnext()ã«å¥ã
ã®ã¡ãœãããããããæ¬è³ªçã«ç«¶åã®å¯èœæ§ããããŸããããããåé¿ããããã«èšèšãããŠããŸãã
å¯å€ãœãŒã¹ã®å Žåã¯ãã¹ããªããã¬ãŒã¿ããã®ããŒã¿ã»ãœãŒã¹ã«ãã€ã³ãããæç¹ãšãã©ããŒã¹ã®çµäºæç¹ãšã®éã§ããœãŒã¹ãæ§é çå¹²æž(èŠçŽ ã®è¿œå ã眮æãåé€)ãåããŠãããšãéæ±ºå®è«çãªä»»æã®åäœãçºçããå¯èœæ§ããããŸãã ããšãã°ããã®ãããªå¹²æžããããšãjava.util.streamãã¬ãŒã ã¯ãŒã¯ã䜿çšãããšãã«é決å®è«çãªä»»æã®çµæãçæãããŸãã
ãœãŒã¹ã®æ§é çå¹²æžã¯æ¬¡ã®æ¹æ³ã§ç®¡çã§ããŸã(æãŸããé )ã
CopyOnWriteArrayListã®ã€ã³ã¹ã¿ã³ã¹ã¯äžå€ã®ãœãŒã¹ã§ãã ãã®ãœãŒã¹ããäœæãããã¹ããªããã¬ãŒã¿ã¯ãIMMUTABLEç¹æ§ãå ±åããŸãã ConcurrentHashMapã®ããŒã»ã»ããã¯äžŠè¡ãœãŒã¹ã§ãã ãã®ãœãŒã¹ããäœæãããã¹ããªããã¬ãŒã¿ã¯ãCONCURRENTç¹æ§ãå ±åããŸãã ConcurrentModificationExceptionãã¹ããŒããŸãã ããšãã°ãArrayListã®ä»ãJDKã®å€ãã®é䞊è¡Collectionã¯ã©ã¹ãé
å»¶ãã€ã³ãã£ã³ã°ãã€ãã§ã€ã«ãã¡ã¹ãã®ã¹ããªããã¬ãŒã¿ãæäŸããŸãã ConcurrentModificationExceptionãã¹ããŒããå¯èœæ§ãé«ããªããŸãã äŸã瀺ããŸãã é åãä¿æããæ¬¡ã®ãããªã¯ã©ã¹ããã(äŸãšããŠç€ºãããã ãã®ãããŸã圹ã«ç«ããªãã¯ã©ã¹ã§ã)ãå®éã®ããŒã¿ãå¶æ°ã®å Žæã«æ ŒçŽããç¡é¢ä¿ã®ã¿ã°ã»ããŒã¿ã奿°ã®å Žæã«æ ŒçŽããŠãããšããŸãã ãã®ã¹ããªããã¬ãŒã¿ã¯ã¿ã°ãç¡èŠããŸãã
class TaggedArray<T> {
private final Object[] elements; // immutable after construction
TaggedArray(T[] data, Object[] tags) {
int size = data.length;
if (tags.length != size) throw new IllegalArgumentException();
this.elements = new Object[2 * size];
for (int i = 0, j = 0; i < size; ++i) {
elements[j++] = data[i];
elements[j++] = tags[i];
}
}
public Spliterator<T> spliterator() {
return new TaggedArraySpliterator<>(elements, 0, elements.length);
}
static class TaggedArraySpliterator<T> implements Spliterator<T> {
private final Object[] array;
private int origin; // current index, advanced on split or traversal
private final int fence; // one past the greatest index
TaggedArraySpliterator(Object[] array, int origin, int fence) {
this.array = array; this.origin = origin; this.fence = fence;
}
public void forEachRemaining(Consumer<? super T> action) {
for (; origin < fence; origin += 2)
action.accept((T) array[origin]);
}
public boolean tryAdvance(Consumer<? super T> action) {
if (origin < fence) {
action.accept((T) array[origin]);
origin += 2;
return true;
}
else // cannot advance
return false;
}
public Spliterator<T> trySplit() {
int lo = origin; // divide range in half
int mid = ((lo + fence) >>> 1) & ~1; // force midpoint to be even
if (lo < mid) { // split out left half
origin = mid; // reset this Spliterator's origin
return new TaggedArraySpliterator<>(array, lo, mid);
}
else // too small to split
return null;
}
public long estimateSize() {
return (long)((fence - origin) / 2);
}
public int characteristics() {
return ORDERED | SIZED | IMMUTABLE | SUBSIZED;
}
}
}
java.util.streamããã±ãŒãžãªã©ã®äžŠåèšç®ãã¬ãŒã ã¯ãŒã¯ã§ã¹ããªããã¬ãŒã¿ãã©ã®ããã«äžŠåèšç®ã«äœ¿çšããããã瀺ãäŸãšããŠãé¢é£ãã䞊åã®forEachãå®è£
ããæ¬¡ã®ãããªæ¹æ³ããããŸããããã¯ãäœæ¥ã®æšå®éãé æ¬¡å®è¡ã§ããã»ã©ååå°ãããªããŸã§ãµãã¿ã¹ã¯ãåå²ããŠããäž»ãªäœ¿ç𿹿³ã瀺ããŠããŸãã ããã§ã¯ããµãã¿ã¹ã¯éã®åŠçé åºã¯éèŠã§ãªããšä»®å®ããŠããŸããç°ãªã(ãã©ãŒã¯ããã)ã¿ã¹ã¯ãããã«èŠçŽ ãåå²ããŠäžå®ã®é åºã§äžŠè¡åŠçããå ŽåããããŸãã ãã®äŸã§ã¯ãCountedCompleterã䜿çšããŠããŸããåæ§ã®äœ¿ç𿹿³ã¯ãä»ã®äžŠåã¿ã¹ã¯æ§ç¯ã«ãé©çšãããŸãã
static <T> void parEach(TaggedArray<T> a, Consumer<T> action) {
Spliterator<T> s = a.spliterator();
long targetBatchSize = s.estimateSize() / (ForkJoinPool.getCommonPoolParallelism() * 8);
new ParEach(null, s, action, targetBatchSize).invoke();
}
static class ParEach<T> extends CountedCompleter<Void> {
final Spliterator<T> spliterator;
final Consumer<T> action;
final long targetBatchSize;
ParEach(ParEach<T> parent, Spliterator<T> spliterator,
Consumer<T> action, long targetBatchSize) {
super(parent);
this.spliterator = spliterator; this.action = action;
this.targetBatchSize = targetBatchSize;
}
public void compute() {
Spliterator<T> sub;
while (spliterator.estimateSize() > targetBatchSize &&
(sub = spliterator.trySplit()) != null) {
addToPendingCount(1);
new ParEach<>(this, sub, action, targetBatchSize).fork();
}
spliterator.forEachRemaining(action);
propagateCompletion();
}
}org.openjdk.java.util.stream.tripwireãtrueã«èšå®ãããŠããå Žåãããªããã£ãã»ãµãã¿ã€ãç¹æ®åã«å¯Ÿããæäœæã«ããªããã£ãå€ã®ãã¯ã·ã³ã°ãçºçãããšã蚺æèŠåãå ±åãããŸããCollection| 修食åãšå | ã€ã³ã¿ãã§ãŒã¹ | 説æ |
|---|---|---|
static interface |
Spliterator.OfDouble |
doubleå€ã«ç¹åãããã¹ããªããã¬ãŒã¿ã§ãã |
static interface |
Spliterator.OfInt |
intå€ã«ç¹åãããã¹ããªããã¬ãŒã¿ã§ãã |
static interface |
Spliterator.OfLong |
longå€ã«ç¹åãããã¹ããªããã¬ãŒã¿ã§ãã |
static interface |
Spliterator.OfPrimitive<T,T_CONS,T_SPLITR extends Spliterator.OfPrimitive<T,T_CONS,T_SPLITR>> |
ããªããã£ãå€ã«ç¹åãããã¹ããªããã¬ãŒã¿ã§ãã
|
| 修食åãšå | ãã£ãŒã«ã | 説æ |
|---|---|---|
static int |
CONCURRENT |
å€éšåæã䜿çšããã«ãè€æ°ã®ã¹ã¬ããã§äžŠè¡ããŠèŠçŽ ã®ãœãŒã¹ãå®å
šã«å€æŽã§ãã(远å ã眮æãåé€ãå¯èœ)ããšã瀺ãç¹æ§å€ã§ãã
|
static int |
DISTINCT |
æ€åºãããèŠçŽ ã®åãã¢
x, yã«å¯ŸããŠ!x.equals(y)ã§ããããšã瀺ãç¹æ§å€ã§ãã |
static int |
IMMUTABLE |
èŠçŽ ã®ãœãŒã¹ãæ§é çã«å€æŽäžå¯ã§ããããšã瀺ãç¹æ§å€ã§ããã€ãŸããèŠçŽ ã®è¿œå ã眮æããã³åé€ãã§ããªãããããã©ããŒã¹äžã«å€æŽãçºçããå¯èœæ§ã¯ãããŸããã
|
static int |
NONNULL |
ãœãŒã¹ã§æ€åºãããèŠçŽ ã
nullã§ã¯ãªãããšãä¿èšŒãããããšã瀺ãç¹æ§å€ã§ãã |
static int |
ORDERED |
èŠçŽ ã®æ€åºé åºãå®çŸ©ãããŠããããšã瀺ãç¹æ§å€ã§ãã
|
static int |
SIZED |
æ§é çãªãœãŒã¹å€æŽããªãå Žåã«ããã©ããŒã¹ãŸãã¯åå²ã®åã«
estimateSize()ããè¿ãããå€ãå®å
šãªãã©ããŒã¹ã§æ€åºãããèŠçŽ æ°ã®æ£ç¢ºãªã«ãŠã³ãã衚ãæéãµã€ãºã衚ãããšã瀺ãç¹æ§å€ã§ãã |
static int |
SORTED |
æ€åºé åºãå®çŸ©æžã¿ã®ãœãŒãé åºã«åŸãããšã瀺ãç¹æ§å€ã§ãã
|
static int |
SUBSIZED |
| 修食åãšå | ã¡ãœãã | 説æ |
|---|---|---|
int |
characteristics() |
ãã®ã¹ããªããã¬ãŒã¿ããã³ãã®èŠçŽ ã®ãäžé£ã®ç¹æ§ãè¿ããŸãã
|
long |
estimateSize() |
forEachRemaining(java.util.function.Consumer<? super T>)ã®ãã©ããŒã¹ã§æ€åºãããèŠçŽ æ°ã®æšå®å€ãè¿ããŸããç¡é倧ãŸãã¯äžæã®å Žåããããã¯ã³ã¹ããé«ãããŠèšç®ã§ããªãå Žåã¯ãLong.MAX_VALUEãè¿ããŸãã |
default void |
forEachRemaining(Consumer<? super T> action) |
ãã¹ãŠã®èŠçŽ ã®åŠçãå®äºãããã¢ã¯ã·ã§ã³ããäŸå€ãã¹ããŒããããŸã§ãçŸåšã®ã¹ã¬ããå
ã§æ®ãã®åèŠçŽ ã«å¯ŸããŠæå®ãããã¢ã¯ã·ã§ã³ãã·ãŒã±ã³ã·ã£ã«ã«å®è¡ããŸãã
|
default Comparator<? super T> |
getComparator() |
ãã®ã¹ããªããã¬ãŒã¿ã®ãœãŒã¹ã
Comparatorã«ãã£ãŠãœãŒããããŠãã(SORTED)å Žåã¯ããã®Comparatorãè¿ããŸãã |
default long |
getExactSizeIfKnown() |
ãã®ã¹ããªããã¬ãŒã¿ã
SIZEDã§ããå Žåã¯estimateSize()ãè¿ããããã§ãªãå Žåã¯-1ãè¿ãç°¡æã¡ãœããã§ãã |
default boolean |
hasCharacteristics(int characteristics) |
æå®ããããã¹ãŠã®ç¹æ§ããã®ã¹ããªããã¬ãŒã¿ã®
characteristics()ã«å«ãŸããŠããå Žåã¯trueãè¿ããŸãã |
boolean |
tryAdvance(Consumer<? super T> action) |
æ®ãã®èŠçŽ ãååšããå Žåã¯ãæå®ãããã¢ã¯ã·ã§ã³ãããã«å¯ŸããŠå®è¡ãã
trueãè¿ããŸãããã以å€ã®å Žåã¯falseãè¿ããŸãã |
Spliterator<T> |
trySplit() |
ãã®spliteratorãããŒãã£ã·ã§ã³åã§ããå Žåã«ãèŠçŽ ã«é©çšãããSpliteratorãè¿ããŸãããã®ã¡ãœããããæ»ããšåæã«ããããã®èŠçŽ ã«ã¯ãã®Spliteratorãé©çšãããªããªããŸãã
|
static final int ORDERED
trySplit()ãèŠçŽ ã®å³å¯ãªæ¥é èŸãåå²ããããšãã¡ãœããtryAdvance(java.util.function.Consumer<? super T>)ã1èŠçŽ ã ãæ¥é èŸé ã«é²ãããšãããã³ãforEachRemaining(java.util.function.Consumer<? super T>)ãã¢ã¯ã·ã§ã³ãæ€åºé ã«å®è¡ããããšãä¿èšŒããŸãã
察å¿ããCollection.iterator()ã§é åºãããã¥ã¡ã³ãåãããŠããå ŽåãCollectionã«ã¯æ€åºé åºããããŸãã ãã®å Žåãæ€åºé åºã¯ãããã¥ã¡ã³ãåãããŠããé åºãšåãã§ãã ãã以å€ã®å Žåãã³ã¬ã¯ã·ã§ã³ã«æ€åºé åºã¯ãããŸããã
Listã§ãã€ã³ããã¯ã¹ã®æé ã«ãªãããšãä¿èšŒãããŸãã ãã ããHashSetãªã©ã®ããã·ã¥ã»ããŒã¹ã®ã³ã¬ã¯ã·ã§ã³ã®å Žåãé åºã¯ä¿èšŒãããŸããã ORDEREDãå ±åããã¹ããªããã¬ãŒã¿ã®ã¯ã©ã€ã¢ã³ãã¯ã亀æå¯èœã§ãªã䞊åèšç®ã«ãããŠé åºä»ãã®å¶çŽãç¶æããããšãæåŸ
ãããŸãã static final int DISTINCT
x, yã«å¯ŸããŠ!x.equals(y)ã§ããããšã瀺ãç¹æ§å€ã§ãã ããã¯ããšãã°ãSetã«åºã¥ãã¹ããªããã¬ãŒã¿ã«åœãŠã¯ãŸããŸãã static final int SORTED
getComparator()ã¡ãœããã¯ãé¢é£ããã³ã³ãã¬ãŒã¿ãè¿ããŸãããããã¯ããã¹ãŠã®èŠçŽ ãComparableã§ããã®èªç¶é åºä»ãã«åŸã£ãŠãœãŒããããŠããå Žåã¯ãnullãè¿ããŸãã
SORTEDãå ±åããã¹ããªããã¬ãŒã¿ã¯ãORDEREDãå ±åããå¿
èŠããããŸãã
Collectionã¯ã©ã¹ã®ã¹ããªããã¬ãŒã¿ã§ãNavigableSetãŸãã¯SortedSetãå®è£
ããŠãããã®ã¯ãSORTEDãå ±åããŸããstatic final int SIZED
estimateSize()ããè¿ãããå€ãå®å
šãªãã©ããŒã¹ã§æ€åºãããèŠçŽ æ°ã®æ£ç¢ºãªã«ãŠã³ãã衚ãæéãµã€ãºã衚ãããšã瀺ãç¹æ§å€ã§ããCollectionã®ãã¹ãŠã®èŠçŽ ã«é©çšããããã³ã¬ã¯ã·ã§ã³ã®ã¹ããªããã¬ãŒã¿ã®å€ãã¯ããã®ç¹æ§ãå ±åããŸãã HashSetã®ãµãã¹ããªããã¬ãŒã¿ã®ããã«ãèŠçŽ ã®ãµãã»ããã«é©çšããããã®å ±åãµã€ãºãæŠç®ãããµãã¹ããªããã¬ãŒã¿ã¯ããã®ç¹æ§ãå ±åããŸããã static final int NONNULL
nullã§ã¯ãªãããšãä¿èšŒãããããšã瀺ãç¹æ§å€ã§ãã (ããã¯ããšãã°ã䞊è¡åŠçã³ã¬ã¯ã·ã§ã³ããã¥ãŒããã³ãããã®å€ãã«åœãŠã¯ãŸããŸãã) static final int IMMUTABLE
IMMUTABLEãŸãã¯CONCURRENTãå ±åããªãã¹ããªããã¬ãŒã¿ã¯ããã©ããŒã¹äžã«æ€åºãããæ§é çå¹²æžã«é¢ããŠãããã¥ã¡ã³ãåãããããªã·ãŒ(ConcurrentModificationExceptionã®ã¹ããŒãªã©)ãæã€ããšãæåŸ
ãããŸãã static final int CONCURRENT
ãã©ããŒã¹äžã«ãœãŒã¹ã䞊è¡ããŠå€æŽãããå Žåã«ãæ¢ç¥ã®æéãµã€ãºã¯å€åããå¯èœæ§ããããããæäžäœã®ã¹ããªããã¬ãŒã¿ã¯CONCURRENTãšSIZEDã®äž¡æ¹ãå ±åããã¹ãã§ã¯ãããŸããã ãã®ãããªã¹ããªããã¬ãŒã¿ã«ã¯äžè²«æ§ããªãããã®ã¹ããªããã¬ãŒã¿ã䜿çšããèšç®ã«ã€ããŠã¯äœãä¿èšŒã§ããŸããã ãµãã¹ããªããã¬ãŒã¿ã¯ããµãåå²ãµã€ãºãããã£ãŠããå Žåã§ããœãŒã¹ã«å¯Ÿãã远å ãåé€ããã©ããŒã¹äžã«åæ ãããªããšãã¯ãSIZEDãå ±åã§ããŸãã
static final int SUBSIZED
trySplit()ã§çæããããã¹ãŠã®ã¹ããªããã¬ãŒã¿ãSIZEDãšSUBSIZEDã®äž¡æ¹ã§ããããšã瀺ãç¹æ§å€ã§ãã (ããã¯ãçŽæ¥ã®åã鿥ã®åããåããããã¹ãŠã®åã¹ããªããã¬ãŒã¿ãSIZEDã«ãªãããšãæå³ããŸãã)
SUBSIZEDã«ãã£ãŠèŠæ±ããããšããã«SIZEDãå ±åããªãã¹ããªããã¬ãŒã¿ã«ã¯äžè²«æ§ããªãããã®ã¹ããªããã¬ãŒã¿ã䜿çšããèšç®ã«ã€ããŠã¯äœãä¿èšŒã§ããŸããã
SIZEDãå ±åããŸããSUBSIZEDã¯å ±åããŸãããããã¯ãããªãŒå
šäœã®ãµã€ãºãããã£ãŠãããµãããªãŒã®æ£ç¢ºãªãµã€ãºã¯ããããªãããšãããããããã§ããboolean tryAdvance(Consumer<? super T> action)
trueãè¿ããŸãããã以å€ã®å Žåã¯falseãè¿ããŸãã ãã®ã¹ããªããã¬ãŒã¿ãORDEREDã§ããå Žåãæ€åºé ã§æ¬¡ã®èŠçŽ ã«å¯ŸããŠã¢ã¯ã·ã§ã³ãå®è¡ãããŸãã ã¢ã¯ã·ã§ã³ã«ãã£ãŠã¹ããŒãããäŸå€ã¯ãåŒåºãåŽã«äžç¶ãããŸãã action - ã¢ã¯ã·ã§ã³falseããã以å€ã®å Žåã¯trueãNullPointerException - æå®ãããã¢ã¯ã·ã§ã³ãnullã§ããå Žådefault void forEachRemaining(Consumer<? super T> action)
ORDEREDã§ããå Žåãæ€åºé ã«ã¢ã¯ã·ã§ã³ãå®è¡ãããŸãã ã¢ã¯ã·ã§ã³ã«ãã£ãŠã¹ããŒãããäŸå€ã¯ãåŒåºãåŽã«äžç¶ãããŸãã falseãè¿ããããŸã§ãç¹°ãè¿ãtryAdvance(java.util.function.Consumer<? super T>)ãåŒã³åºããŸãã å¯èœãªå Žåã¯åžžã«ãªãŒããŒã©ã€ãããŠãã ããã action - ã¢ã¯ã·ã§ã³NullPointerException - æå®ãããã¢ã¯ã·ã§ã³ãnullã§ããå ŽåSpliterator<T> trySplit()
ãã®ã¹ããªããã¬ãŒã¿ãORDEREDã§ããå Žåãè¿ãããã¹ããªããã¬ãŒã¿ã¯èŠçŽ ã®å³å¯ãªæ¥é èŸãã«ããŒããå¿
èŠããããŸãã
ãã®ã¹ããªããã¬ãŒã¿ãç¡éã®èŠçŽ æ°ãã«ããŒããå Žåãé€ããç¹°ãè¿ãtrySplit()ãåŒã³åºããšãæçµçã«ã¯nullãè¿ãããã¯ãã§ãã null以å€ãè¿ããããšãã¯æ¬¡ã®ããã«ãªããŸãã
estimateSize()ã§å ±åãããå€ã¯ãåå²åŸã®ãã®ã¹ããªããã¬ãŒã¿ããã³è¿ãããã¹ããªããã¬ãŒã¿ã®estimateSize()ãšçããããããã倧ãããªããã°ãªããŸãããããã«ãSUBSIZEDã§ããå Žåãåå²åã®ãã®ã¹ããªããã¬ãŒã¿ã®estimateSize()ã¯ãåå²åŸã®ãã®ã¹ããªããã¬ãŒã¿ããã³è¿ãããã¹ããªããã¬ãŒã¿ã®estimateSize()ã®åèšãšçãããªããã°ãªããŸããããã®ã¡ãœããã¯ãªãããã®çç±ã§nullãè¿ãå ŽåããããŸã(空ã§ããããããã©ããŒã¹éå§åŸã«åå²ã§ããªããããããŒã¿æ§é ã®å¶çŽã®ãããå¹çäžã®èæ
®äºé
ã®ãããªã©)ã
trySplitã¡ãœããã¯ããã®èŠçŽ ã(ãã©ããŒã¹ã䜿çšããã«)å¹çãããã¡ããã©ååã«åå²ããŠããã©ã³ã¹ã®åãã䞊åèšç®ãå¯èœã«ããŸãã ãã®çæ³ããéžè±ããŠããå€ãã®å Žåã¯äŸç¶ãšããŠããªã广çã§ããããšãã°ããããã®ãã©ã³ã¹ã®åããããªãŒãåã«å€§ãŸãã«åå²ããå ŽåãããªãŒãã»ããŒãã«1ã€ãŸãã¯2ã€ã®èŠçŽ ãå«ãŸããŠããããªãŒã§ãããã®ããŒããããã«åå²ã§ããªãå Žåã§ãã ãã ãããã©ã³ã¹ã倧ããåã£ãŠããå ŽåããtrySplitã®ã¡ã«ããºã ã®å¹çãéåžžã«æªãå Žåãéåžžã¯ãçµæãšããŠåŸããã䞊ååŠçã®ããã©ãŒãã³ã¹ã¯äœããªããŸãã Spliteratorããã®ã¹ããªããã¬ãŒã¿ãåå²ã§ããªãå Žåã¯nulllong estimateSize()
forEachRemaining(java.util.function.Consumer<? super T>)ã®ãã©ããŒã¹ã§æ€åºãããèŠçŽ æ°ã®æšå®å€ãè¿ããŸããç¡é倧ãŸãã¯äžæã®å Žåããããã¯ã³ã¹ããé«ãããŠèšç®ã§ããªãå Žåã¯ãLong.MAX_VALUEãè¿ããŸãã
ãã®ã¹ããªããã¬ãŒã¿ãSIZEDã§ããããŸã éšåçã«ãã©ããŒã¹ãŸãã¯åå²ãããŠããªãå Žåããããã¯ããã®ã¹ããªããã¬ãŒã¿ãSUBSIZEDã§ããããŸã éšåçã«ãã©ããŒã¹ãããŠããªãå Žåããã®æšå®å€ã¯å®å
šãªãã©ããŒã¹ã§æ€åºãããèŠçŽ æ°ã®æ£ç¢ºãªã«ãŠã³ãã§ãªããã°ãªããŸããã ãã以å€ã®å Žåããã®æšå®å€ã¯ä»»æã®äžæ£ç¢ºãªå€ã§ããŸããŸããããtrySplit()ã®åŒåºãã«ããã£ãŠãæå®ããããšããã«æžå°ããå¿
èŠããããŸãã
Long.MAX_VALUEãdefault long getExactSizeIfKnown()
SIZEDã§ããå Žåã¯estimateSize()ãè¿ããããã§ãªãå Žåã¯-1ãè¿ãç°¡æã¡ãœããã§ããSIZEDç¹æ§ãå ±åããå Žåã¯estimateSize()ã®çµæãè¿ãããã以å€ã®å Žåã¯-1ãè¿ããŸãã-1ãint characteristics()
ORDEREDãDISTINCTãSORTEDãSIZEDãNONNULLãIMMUTABLEãCONCURRENTãSUBSIZEDã®å€ã®è«çåã§è¡šãããŸãã trySplitã®åŒåºãã®åãŸãã¯åŒåºããšåŒåºãã®éã«ã1ã€ã®ã¹ããªããã¬ãŒã¿ã«å¯ŸããŠç¹°ãè¿ãcharacteristics()ãåŒã³åºããšãåžžã«åãçµæãè¿ãããã¯ãã§ãã
ã¹ããªããã¬ãŒã¿ãäžè²«æ§ã®ãªãç¹æ§ã»ãã(1ã€ã®åŒåºãããè¿ããããã®ããè€æ°ã®åŒåºãããè¿ããããã®)ãå ±åããå Žåããã®ã¹ããªããã¬ãŒã¿ã䜿çšããèšç®ã«ã€ããŠã¯äœãä¿èšŒã§ããŸããã
SIZEDãSUBSIZEDããã³CONCURRENTãåç
§ããŠãã ããã default boolean hasCharacteristics(int characteristics)
characteristics()ã«å«ãŸããŠããå Žåã¯trueãè¿ããŸããcharacteristics - ãã§ãã¯ããç¹æ§trueãããã§ãªãå Žåã¯falsedefault Comparator<? super T> getComparator()
Comparatorã«ãã£ãŠãœãŒããããŠãã(SORTED)å Žåã¯ããã®Comparatorãè¿ããŸãã ãœãŒã¹ãèªç¶é åºã§ãœãŒããããŠãã(SORTED)å Žåã¯nullãè¿ããŸãã ãã以å€ã®å ŽåããœãŒã¹ããœãŒããããŠ(SORTED)ããªããšãã¯IllegalStateExceptionãã¹ããŒããŸãã IllegalStateExceptionãã¹ããŒããŸããnullãIllegalStateException - ã¹ããªããã¬ãŒã¿ãSORTEDç¹æ§ãå ±åããªãå Žåã ãã°ãŸãã¯æ©èœãéä¿¡
詳现ãªAPIãªãã¡ã¬ã³ã¹ããã³éçºè
ããã¥ã¡ã³ãã«ã€ããŠã¯ãJava SEã®ããã¥ã¡ã³ããåç
§ããŠãã ããã ãã®ããã¥ã¡ã³ãã«ã¯ãæŠå¿µçãªæŠèŠãçšèªã®å®çŸ©ãåé¿æ¹æ³ãæå¹ãªã³ãŒãäŸãªã©ã®ãéçºè
ã察象ã«ãããã詳现ãªèª¬æãå«ãŸããŠããŸãã
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyãåç
§ããŠãã ããã