现在的位置: 首页 > 综合 > 正文

Java集合简单回顾总结

2014年08月16日 ⁄ 综合 ⁄ 共 2248字 ⁄ 字号 评论关闭

       如图,Java集合框架如上所示,虚线框为接口,实线框为派生类。引入集合的原因是数组(Array)只能是固定大小的,在声明时必须说明其大小,并且一次分配,不能动态增长。Collection的派生接口大致分为 Map(键值对)\List(允许存在重复元素)\Set(不允许存在重复元素)\Queue等。(具体参见上面这个简单的图和Java
API)


List接口:

定义List的两大用处:

1)maintain elements in a particular sequence

2)allow insertion and removal of elements in the middle of the List

(注:可以把List理解为我们数据结构中所学的“线性表”,线性表根据其实现方式可以分为 顺序表 和 线性链表)

ArrayList类:an array that can automatically expands itself, 有定义可以看出其与数组之间的区别——可以动态增长。常用 get() 获取元素,add() 增加元素, size() 查询该集合的长度(所含元素的个数),可以通过泛型来约束其内部所含元素的类型,不至于程序将橘子加入了苹果队列中。如
ArrayList<Apple> 其中Apple为预先定义好的类。(特点:随机存取,但增删元素速度慢)

这里元素的遍历可以根据索引来get()元素,亦可通过 foreach 来直接遍历元素。

LinkedList类:理解为线性链表,特点是增删元素快,但存取速度慢

1) more efficient than ArrayList in insertion and removal

2) allow it to be used as a Stack, a Queue, or a double-ended queue (这也是为什么引入 LinkedList 类的原因)

常用的方法有:remove() \ indexOf() \ equals() \ toArray() (将集合转为数组)

此外它有一些特殊的方法(引入这些方法的原因是LinkedList常被用来当作栈、队列、双端队列)

getFirst() == element() ,返回集合的第一个元素,若集合为空,则报异常

peek() 获取并返回第一个元素,若为空,则返回null


removeFirst() == remove() 移除(弹出)并返回集合的第一个元素,若为空,则报异常

poll() 获取并移除集合的第一个元素,若为空,则返回null


addFirst()  在头部追加元素

offer() == add() == addLast()  在尾部追加元素

(这里列出这些方法的目的是为了比较部分方法之间的相似性,因为LinkedList可以被用在多种状况下,根据需要,可以根据API来选择不同的方法)


Set接口:

特点是:Set cannot have duplicate elements (不允许存在重复元素),设计 Set 的最重要原则是方便检索。

HashSet:采用 harshing 算法,因此检索效率高 (之于Set的一般用途,HashSet是最常被实现的类)

TreeSet:采用 红黑树 数据结构,因此无论插入顺序如何,集合最终按照字典顺序输出

LinkedHashSet:顾名思义,使用 harshing 算法提高检索效率,同时元素按照插入顺序排序

这里提两个方法:contains() 方法常被用来检测是否含有某个元素,isEmpty方法常被用来测试集合是否为空


Map接口:

引入 Map 的目的是为了使用另一种方法检索元素,即为每一个Value对应一个唯一的Key,这样可以用Key来检索集合。通过put(key,value)来添加元素,通过get(key)来检索元素。三个子类与
Set 的子类很像,如下:


HashMap

TreeMap

LinkedHashMap


特有内部接口:

Map.Entry<K,V>  内部接口,表示一组映射关系

这里值得说明几个Map特有的方法:

entrySet() 返回的是 Map里的所有映射关系(即Map.Entry),例如

Set entrys = map.entrySet();
for(Object o:entrys){
   System.out.println(o)
}

将返回一行一行的 key=value 关系对

keySet() 返回的是 Map里所有key的集合

values() 返回的是 Map里所有value的集合


Iterator接口:

使用方法:

1) ask a collection hand you an Iterator using: iterator()

2) get the next object using: next()

3) see if there are any more obejcts: hasNext()

4) remove the last element returned by iterator with: remove()

e.g

	List<Pet> pets = Pets.arrayList(12);
	Iterator<Pet> it = pets.iterator();
	while(it.hasNext()){
		System.out.println(it.next() + ",");
	}

ListIterator接口:

特点:可双向遍历

方法:

set(): replace the last element that it visited

listIterator() : the same as iterator()

listIterator(n) : 迭代器的初始指向 index 为 n 的元素

previous() & hasPrevious() :向前迭代

【上篇】
【下篇】

抱歉!评论已关闭.