java学习基础 Collection容器的区别

本文深入解析Java集合框架,包括Collection、Collections、Set、Map与List的区别与使用,以及如何高效地遍历与管理集合元素。

这里写图片描述
这里写图片描述

**Collection<–List<–Vector
Collection<–List<–ArrayList
Collection<–List<–LinkedList
Collection<–Set<–HashSet
Collection<–Set<–HashSet<–LinkedHashSet
Collection<–Set<–SortedSet<–TreeSet
Map<–SortedMap<–TreeMap
Map<–HashMap**

Collection和Collections区别
1、 java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
2、 java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

Set、Map、List 区别
Map 有HashMap和HashTable,
HashTable 继承了Map接口,实现了key-value映射的哈希表,Hashtable是同步的,且不允许为NULL。
HashMap类
HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。
Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。同时Set也被HashSet和TreeSet继承实现,

Map使用put()方法添加元素,Set使用add()方法添加元素

List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。类似java的数组。
Vector基于数组(Array)的List,其实就是封装了数组所不具备的一些功能方便我们使用,所以它难易避免数组的限制,同时性能也不可能超越数组。
ArrayList同Vector一样是一个基于数组上的链表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector好一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。

Iterate 迭代器
迭代器(Iterator)模式,又叫做游标(Cursor)模式。GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。 从定义可见,迭代器模式是为容器而生。很明显,对容器对象的访问必然涉及到遍历算法。
使用Collection类的Iterator,可以方便的遍历Vector, ArrayList, LinkedList等集合元素,避免通过get()方法遍历时,针对每一种对象单独进行编码。

Collection coll = new Vector(); //LinkedList(); //ArrayList();  
coll.add("Tody");  
coll.add("is");  
coll.add("Sunday.");  

// Output all elements by iterator  
Iterator it = coll.iterator();  
while(it.hasNext()) {  
    System.out.print(it.next() + " ");  
} 
Collection coll = new HashSet();  
coll.add("Tody");  
coll.add("is");  
coll.add("Sunday.");  

// Output all elements by iterator  
Iterator it = coll.iterator();  
while(it.hasNext()) {  
    System.out.print(it.next() + " ");  
} 

由上面两个例子看出,在List和Set对象中,Iterator的next()方法返回的值是不一样的。
原因是List属于线性集合,元素是有序的,读取时是按照数组的形式,一个接一个的读取,存储也是按照add的顺序添加的。
而Set属于非线性的,是无序的,所以读取的元素与添加的顺序不一定一致。
对于HashSet,其实它返回的顺序是按Hashcode的顺序。
如果迭代也有序,则可以用LinkedHashSet。

迭代器代码转载处:http://topic.youkuaiyun.com/u/20101227/09/63a23d05-7f15-4b0e-9287-e97f96ba4349.html?77188351

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值