引入新的接口来表示具有定义的相遇顺序的集合。每个这样的集合都有一个明确定义的第一个元素、第二个元素,依此类推,直到最后一个元素。它还提供统一的 API 来访问其第一个和最后一个元素,并以相反的顺序处理其元素。
Sequenced collections
interface SequencedCollection<E> extends Collection<E> {
// new method
SequencedCollection<E> reversed();
// methods promoted from Deque
void addFirst(E);
void addLast(E);
E getFirst();
E getLast();
E removeFirst();
E removeLast();
}
List<String> list = new ArrayList<>();
list.add("1"); list.add("4");
list.add("6"); list.add("2");
list.add("9"); list.add("3");
System.out.println(list.getFirst()); //1
System.out.println(list.getLast()); //3
System.out.println(list.removeFirst()); //1
System.out.println(list); //[4, 6, 2, 9, 3]
System.out.println(list.removeLast()); //3
System.out.println(list); //[4, 6, 2, 9]
list.addFirst("6");
System.out.println(list); //[6, 4, 6, 2, 9]
System.out.println(list.reversed()); //[9, 2, 6, 4, 6]
Sequenced sets
interface SequencedSet<E> extends Set<E>, SequencedCollection<E> {
SequencedSet<E> reversed(); // covariant override
}
LinkedHashSet<String> set = new LinkedHashSet<>();
set.add("1"); set.add("5");
set.add("9"); set.add("2");
set.add("4"); set.add("7");
Set<String> collect = new HashSet<>(set);
System.out.println(collect); //[1, 2, 4, 5, 7, 9]
LinkedHashSet<String> set1 = new LinkedHashSet<>(collect);
System.out.println(set1.reversed());//[9, 7, 5, 4, 2, 1]
Sequenced maps
interface SequencedMap<K,V> extends Map<K,V> {
// new methods
SequencedMap<K,V> reversed();
SequencedSet<K> sequencedKeySet();
SequencedCollection<V> sequencedValues();
SequencedSet<Entry<K,V>> sequencedEntrySet();
V putFirst(K, V);
V putLast(K, V);
// methods promoted from NavigableMap
Entry<K, V> firstEntry();
Entry<K, V> lastEntry();
Entry<K, V> pollFirstEntry();
Entry<K, V> pollLastEntry();
}
SequencedMap<String, String> map = new LinkedHashMap<>();
map.put("name", "张三"); map.put("age", "18");
map.put("nickname", "法外狂徒"); map.put("sex", "男");
System.out.println(map); //{name=张三, age=18, nickname=法外狂徒, sex=男}
System.out.println(map.reversed()); //{sex=男, nickname=法外狂徒, age=18, name=张三}
SequencedSet<String> sequencedKeySet = map.sequencedKeySet();
System.out.println(sequencedKeySet); //[name, age, nickname, sex]
SequencedCollection<String> sequencedValues = map.sequencedValues();
System.out.println(sequencedValues); //[张三, 18, 法外狂徒, 男]
SequencedSet<Map.Entry<String,String>> sequencedEntrySet = map.sequencedEntrySet();
System.out.println(sequencedEntrySet); //[name=张三, age=18, nickname=法外狂徒, sex=男]
map.putFirst("first","first");
System.out.println(map); //{first=first, name=张三, age=18, nickname=法外狂徒, sex=男}
map.putLast("last","last");
System.out.println(map); //{first=first, name=张三, age=18, nickname=法外狂徒, sex=男, last=last}
System.out.println(map.firstEntry()); //first=first
System.out.println(map.lastEntry()); //last=last
System.out.println(map.pollFirstEntry());//first=first
System.out.println(map); //{name=张三, age=18, nickname=法外狂徒, sex=男, last=last}
System.out.println(map.pollLastEntry());//last=last
System.out.println(map); //{name=张三, age=18, nickname=法外狂徒, sex=男}
改造
上面定义的三个新接口完全适合现有的集合类型层次结构

List现在将SequencedCollection作为其直接超接口
Deque现在将SequencedCollection作为其直接的超级接口
LinkedHashSet还实现了 SequencedSet
SortedSet现在将SequencedSet作为其直接超接口
LinkedHashMap还实现了SequencedMap
SortedMap现在将SequencedMap作为其直接的超级接口
Collections 实用程序类添加了新方法,为三种新类型创建不可修改的包装器
Collections.unmodifiableSequencedCollection(sequencedCollection)
Collections.unmodifiableSequencedSet(sequencedSet)
Collections.unmodifiableSequencedMap(sequencedMap)
var unmodifiableSequencedCollection = Collections.unmodifiableSequencedCollection(sequencedValues);
System.out.println(unmodifiableSequencedCollection); //[张三, 18, 法外狂徒, 男]
var unmodifiableSequencedSet = Collections.unmodifiableSequencedSet(sequencedEntrySet);
System.out.println(unmodifiableSequencedSet); //[name=张三, age=18, nickname=法外狂徒, sex=男]
var unmodifiableSequencedMap = Collections.unmodifiableSequencedMap(map.reversed());
System.out.println(unmodifiableSequencedMap); //{sex=男, nickname=法外狂徒, age=18, name=张三}
1688

被折叠的 条评论
为什么被折叠?



