core java 9中文版_Core Java笔记 9.集合(I) - 使用

Core Java笔记 9.集合(I) - 使用

CoreJava

本章重点:

Java Collction 设计策略

具体的集合类

Java Collection 设计策略

Java 采用如下策略:

1. Java Collection 也是采用 interface 和 implementation 分离. 接口本身不关心实现的效率,那是选择时考虑的.

2. Java Collection 是核心接口:Collection 和 Iterator.

Interface Collection 和 Iterator

Collection 是 Java Collection Framework 的 super interface.

Collection 核心方法:

publicinterfaceCollectionextendsIterable{

booleanadd(E element);

Iteratoriterator();

// other methods ...

}

publicinterfaceIterable{

Iteratoriterator();

}

注:

add() -- 增

iterator() -- 迭代器可以完成:查、删操作.

Iterator 定义:

publicinterfaceIterator{

Enext();

booleanhasNext();

voidremove();

}

Iterator 用于 loop:

Collectionc=...;

Iteratoriter=c.iterator();

while(iter.hasNext()){

Stringelement=iter.next();

// do something with element

}

// Java SE 5.0 for-each loop

// 任何实现了 Iterable 接口的对象一起工作,都支持 for-each 语法

for(Stringelement:c){

// do something with element

}

具体的集合类

Full Java Collections:

85ee8333f81e0f7ca0e5a5b3a89f4cd0.png

48ec30a5c0cde55f668c31eb6b7beb24.png

通过测试代码介绍 Java 核心的集合类的使用.

LinkedList 与 ListIterator

LinkedList: ordered collection(doubly linked list in Java). 它除了拥有普通型的迭代器,还拥有一个增强型迭代器(ListIterator).

ListIterator: 双向迭代器,而且支持:add() 操作.

interfaceListIteratorextendsIterator{

voidadd(E element);

E previous();

booleanhasPrevious();

}

测试代码:

publicclassListsTest{

publicstaticvoidmain(String[]args){

Liststaff=newLinkedList();

staff.add("Amy");

staff.add("Bob");

staff.add("Carl");

System.out.println(staff);// [Amy, Bob, Carl]

// 测试 iterator

// !!!!!迭代器的行为可以想象下:光标 |ABC A|BC AB|C ABC|

Iteratoriter=staff.iterator();

// 要点1: 调用 remove() 必须调用 next()[next 和 remove 强关联]

// iter.remove(); // java.lang.IllegalStateException

// 要点2: 禁止重复 remove()

// iter.remove();

// iter.remove(); // java.lang.IllegalStateException

// 要点3: 删除操作

Iteratoriter2=staff.iterator();

Stringfirst=iter2.next();

iter2.remove();// 删除第一个元素

Stringsecond=iter2.next();

iter2.remove();// 删除第二个元素

System.out.println(staff);// [Carl]

// 测试 ListIterator

ListIteratorlistIter=staff.listIterator();

listIter.add("Tom");

listIter.add("Jerry");

listIter.next();// skip past first element

listIter.add("Juliet");

System.out.println(staff);// [Tom, Jerry, Carl, Juliet]

while(listIter.hasNext()){

listIter.next();

}

listIter.add("Jetty");

System.out.println(staff);// [[Tom, Jerry, Carl, Juliet, Jetty]

}

}

ArrayList

Set

Set 两个常用的实现: HashSet 和 TreeSet.

TreeSet 的元素必须实现 Comparable, 或者初始化时 提供一个比较器。

Queue 和 Deque

Queue: 队列. 提供 add(offer), remove(poll), element(peek).

Deque: 双端队列. 扩展自 Queue, 提供 head 和 tail 的add(offer), remove(poll), get(peek)操作.

Deque的典型实现: ArrayDeque 和 LinkedList.

PriorityQueue

PriorityQueue: 优先队列,要求元素是 Comparable 或者提供 Comparator.

Map

Map 的两个常用实现: HashMap 和 TreeMap.

Map 的三个视图.

SetkeySet();

Collectionvalues();

Set>entrySet();// Map 其实是利用Set 实现的,其实就是 元素是 Map.Entry 类型的 Set

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值