黑马程序员--Java集合的小结

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

Framework

集合框架是一个统一的架构,用来表示和操作集合。

集合框架主要是由接口,抽象类和实现类构成。


Collection:集合层次中的根接口,JDK没有提供这个接口的实现类

List:元素是有序的,元素可以重复。因为该集合体系有索引

ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快,但是增删稍慢,线程不同步

LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢

Vector:底层是数组数据结构。线程同步。被ArrayList替代了

Set:元素是无序的,元素不可以重复

HashSet:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。唯一性判断依据,如果元素HashCode值相同,才会判断equals是否为true。不同,不会调用equals

TreeSet:可以对set集合中的元素进行排序。

Map:该集合存储键值对。一对一的往里存,而且要保证键的唯一性。

Hashtable:底层是哈希表数据结构,不可以存入nullnull值。该集合是线程同步的。Jdk1.0,效率低

HashMap:底层是哈希表数据结构,允许使用null键和null值,该集合是不同步的。Jdk1.2,效率高

TreeMap:底层是二叉树据结构。线程不同步,可以用于给map集合中的键进行排序


List接口

  List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。

  除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个 ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素, 还能向前或向后遍历。

实现List接口的常用类有LinkedListArrayListVector

 

ArrayList

ArrayList是List的子类,它和HashSet想法,允许存放重复元素,因此有序。集合中元素被访问的顺序取决于集合的类型。如果对ArrayList进行访问,迭代器将从索引0开始,每迭代一次,索引值加1。然而,如果访问HashSet中的元素,每个元素将会按照某种随机的次序出现。虽然可以确定在迭代过程中能够遍历到集合中的所有元素,但却无法预知元素被访问的次序。

 

LinkedList

LinkedList是一种可以在任何位置进行高效地插入和删除操作的有序序列。

 

Vector

枚举就是Vector特有的取出方式,发现枚举和迭代器很像,其实没枚举和迭代是一样的。因为枚举的名称以及方法的名称都过长,所以被迭代器取代了。


Set接口

Set是一种不包含重复的元素的Collection,即任意的两个元素e1e2都有e1.equals(e2)=falseSet最多有一个null元素。

很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。

请注意:必须小心操作可变对象(Mutable Object)。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。

import java.util.*;

class VectorDemo 
{
	public static void main(String[] args) 
	{
		Vector v = new Vector();

		v.add("java01");
		v.add("java02");
		v.add("java03");

		Enumeration en = v.elements();
		
		while(en.hasMoreElements())
		{
			System.out.println(en.nextElement());
		}
	}
}

HashSet

HashSetSet接口的一个子类,主要的特点是:里面不能存放重复元素,而且采用散列的存储方法,所以没有顺序。这里所说的没有顺序是指:元素插入的顺序与输出的顺序不一致。

 

TreeSet

使用元素的自然顺序对元素进行排序,护着根据创建set时提供的Comparator进行排序,具体取决于使用的结构方法。

 

Map接口

  请注意,Map没有继承Collection接口,Map提供keyvalue的映射。一个Map中不能包含相同的key,每个key只能映射一个 valueMap的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。

 

Hashtable

Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value

 

HashMap

HashMapHashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null valuenull key。,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap 的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者load factor过低。


TreeMap

该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparator进行排序,具体取决于使用的构造方法。


相互区别

 

HashMapTreeMap

1HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMapHashMap中元素的排列顺序是不固定的)。

2HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该 使用TreeMapHashMap中元素的排列顺序是不固定的)。集合框架”提供两种常规的Map实现:HashMapTreeMap (TreeMap实现SortedMap接口)

3、在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。使用HashMap要求添加的键类明确定义了hashCode()和 equals()的实现。

 


------- android培训java培训、期待与您交流! ----------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值