java之Collection框架学习笔记

------- android培训java培训、期待与您交流! ----------

Collection框架是java中非常重要的基础部分。

1. Collection框架层次的顶层是Collection接口。Collection接口有两个非常重要的子接口:List接口和Set接口。ArrayList,LinkedList,Vector是接口List的实现类;HashSet和TreeSet是Set接口的实现类。

2.Collection框架另一个顶层接口是Map接口。Map接口重要的子接口:Hashtable,HashMap,TreeMap

Collection接口

Collection接口是顶层接口,其中定义了集合框架共有的方法。(一下省略返回值和传入参数,详细可查看java API)

基本方法:

增:add()

删:remove()

改:Link和Set有区别

查:contains() isEmpty() 


集合操作方法:

交:retainAll()

并:addAll()

差:removeAll()


迭代器方法:

iterator()


其他方法:

equals() size() clear()...

List接口

特点:元素是有序的,而且可以重复。

特有方法:(对索引的操作)

增:add(index, element)

删:remove(index)

改:set(index,element)

查:get(index) subList(from, to)

迭代器:

listIterator()

这个迭代器非常重要,它是List的专属迭代器,可以在遍历集合的同时对其进行修改,而不会出现ConcurrentModificationException.

一般由iterator()得到的迭代器是不允许在集合遍历时对其修改的

ArrayList

特点: 底层是数组数据结构,可以看成是可变长度的数组。线程不同步(与Vector比较)

优势:查询速度快

劣势:增删操作较慢

LinkedList

特点:底层是链表数据结构

优势:增删较快

劣势:查找较慢

特有方法:

增:addFirst()   addLast()

查:getFirst()    getLast() 如果集合为空,抛出NoSuchElementException

删:removeFirst() removeLast() 如果集合为空,抛出NoSuchElementException

jdk6.0后出现替代方法

增:offerFirst() offerLast() 增加

查:peakFirst() peakLast() 获取不移除,如果集合为空,返回null

删:pollFirst() pollLast()获取并移除,如果集合为空,返回null

Vector

功能与ArrayList相同,但Vector线程同步。Vector是jdk1.0就有的,但Collection框架是jdk1.2才出现的,由于Vector效率较低,所以Vector基本上已被ArrayList代替。

Set接口

特点:元素是无序的(存取顺序不一致),而且不允许重复。

Set的方法与Collection基本一致。

HashSet

特点:底层数据结构是hash表结构

HashSet利用hashCode()和equals()两个方法来保证元素的唯一性

如果元素的hashCode相同,才会判断equals方法是否为true;

如果元素的hashCode不同,则不会判断equals方法。

一般在建立类时,如果其对象需要存放在HashSet中,一般都要重写hashCode()和equals()。因为在Object中equals()比较的是地址值。

TreeSet

特点:底层数据结构是二叉树,可以对集合中的元素进行排序

TreeSet排序实现:

第一种方式:

让元素自身具备比较性,必须要继承Comparable接口,实现compareTo方法,这种方式被称为自然排序或者默认排序。

第二种方式:

让集合本身具备比较元素的能力。定义比较器类继承Comparator接口,实现compare(object1, object2)方法。然后创建比较器对象作为参数传入到TreeSet中。

当两种排序方式都存在时,以比较器为主。

Map接口

Map<Key, Value>属于双列集合,数据一对一对往里存,而且要保证键是唯一的。

方法:

增加:put()  putAll()

删除:clear()  remove()

判断:containsKey()  containsValue()  

获取:get()  size() values()

entrySet()  keySet()

Map集合的两种重要的取出方式:

1.将map中的所有键存到Set集合中,可以用Set的迭代器取出所有的键,然后用get(Key)获取所有的值。


Map<String,String> map = new HashMap<String,String>();
map.put("a","hello");
map.put("b","world");
		
Set<String> keySet = map.keySet();
for(Iterator<String> it = keySet.iterator(); it.hasNext(); ){
	String key = it.next();
	System.out.println("key: "+key+"--value:"+map.get(key));	
}

2.将map集合中的映射关系存入到Set集合中,这个关系的数据类型是Map.Entry(这是Map接口的内部接口),这个接口提供了getKey()和getValue()方法。

Set<Map.Entry<String, String>> entrySet = map.entrySet();
Iterator<Map.Entry<String, String>> it = entrySet.iterator();
while(it.hasNext()){
	Map.Entry<String, String> me = it.next();
	System.out.println("key:"+me.getKey() + "--value:"+me.getValue());
}

Hashtable接口

特点:底层为hash表结构,不允许null作为键和值。线程同步。jdk1.0出现。

HashMap接口

特点:底层为hash表结构,允许null作为键和值。线程不同步。jdk1.2出现。用于替代Hashtable,而且HashMap效率更高。

TreeMap接口

特点:底层是二叉树结构,可用于给map中的键进行排序,线程不同步。
------- Windows Phone 7手机开发.Net培训、期待与您交流! -------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值