标签:style blog color io 使用 java ar for div
常用的集合有List,Set,Map,这三个都是接口,
其中List,和Set继承于Collection
而Map是一个可以保存键值对的接口
Collection接口
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。
一些 Collection允许相同的元素而另一些不行。一些能排序而另一些不行。
Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。
所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,
有一个 Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。
后一个构造函数允许用户复制一个Collection。
如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:
Iterator it = collection.iterator(); // 获得一个迭代子
while(it.hasNext()) {
Object obj = it.next(); // 得到下一个元素
}
由Collection接口派生的两个接口是List和Set。
List接口,List接口常用的两个实现类是LinkedList类和ArrayList类
List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。
和下面要提到的Set不同,List允许有相同的元素。
除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,
返回一个 ListIterator接口,和标准的Iterator接口相比,
ListIterator多了一些add()之类的方法,允许添加,删除,设定元素, 还能向前或向后遍历。
LinkedList类
LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在 LinkedList的首部或尾部。
这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
LinkedList类采用链表结构保存对象,这种结构的优点是便于向集合中插入和删除对象,经常需要向集合中插入/删除对象时,使用此类
效率会比较好,但对于随机访问集合中的对象,则会较慢.
ArrayList类
ArrayList实现了可变大小的数组。它允许所有元素,包括null。可以根据索引位置对集合进行快速的随机访问,缺点是向指定的索引位置
插入对象或删除对象的时候速度较慢,size,isEmpty,get,set方法运行时间为常数。
实例化方法如下:
List<String> list=new ArrayList<String>();
总结:基于Array的List适合查询,而LinkedList(链表)适合添加,删除操作。
Set接口
Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。
很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。
Set接口常用的实现类有HashSet和TreeSet.
实例化方法如下:
Set<String> set1=new HashSet<String>();
Set<String> set2=new TreeSet<String>();
Set 集合中的元素是不能重复的,而且是无序的,遍历Set集合元素的时候,有可能与插入Set元素时候的顺序并不一样
遍历Set集合的方法时,可以用For循环,
或者用Collection接口的iterator()方法取得迭代器来遍历
Map接口
请注意,Map没有继承Collection接口,Map提供key到value的映射。
一个Map中不能包含相同的key,每个key只能映射一个 value。
Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
即Map接口遍历的时候常用到的三个方法:
entrySet()
返回 Set<Map.Entry<K,V>>此映射中包含的映射关系的 Set 视图。
keySet()
返回Set<K> 此映射中包含的键的 Set 视图。
values()
返回Collection<V>此映射中包含的值的 Collection 视图。
Map接口常用的实现类有HashMap和TreeMap.通常建议使用HashMap,因为HashMap类实现的对于添加和删除的行为
效率更高.HashMap是基于哈希表的Map接口的实现.
而TreeMap中的映射存在一定的顺序,如果希望Map集合中的对象存在一定的顺序,那就使用TreeMap类
HashMap允许使用Null值和Null的元素,但是要求键的唯一性,此类不保证集合的顺序,特别是不保证该顺序恒久不变
TreeMap类不仅实现的Map接口,还实现了SortedMap接口,因此该类的集合中具有一定的顺序.但是在添加.删除和定位的时候,
性能会比HashMap类差一些.由于TreeMap类实现的Map集合中的映射关系是根据键对象按照一定的顺序排序的.因为不允许键的对象是Null
实现的应用中,可以通过HashMap类创建Map集合,当需要顺序输出的时候,再创建一个键值对相同的映射关系的TreeMap类,然后输出
练习代码示例:
import java.util.*; class test { public static void main(String[] args){ List<String> d=new LinkedList<String>(); d.add("aaa"); d.add("bbb"); d.add("ccc"); d.add("ddd"); d.add("eee"); Set<String> set=new HashSet<String>(); set.add("1"); set.add("1"); set.add("1"); set.add("1"); set.addAll(d); set.add("2"); Set<String> intset=new TreeSet<String>(); intset.add("1"); intset.add("2"); intset.add("3"); intset.add("4"); intset.add("5"); intset.add("6"); Iterator<String> i=intset.iterator(); while(i.hasNext()) { System.out.println(i.next()); } Map<String,String> map=new HashMap<String,String>(); map.put("1","11"); map.put("2","22"); map.put("3","33"); map.put("4","44"); for(int l=1;l<map.size();l++){ System.out.println(map.get(""+l+"")+""); } Collection<String> vv=map.values(); Iterator<String> vvi=vv.iterator(); while(vvi.hasNext()){ System.out.println(vvi.next()); } Set<String> keySet=map.keySet(); vvi=keySet.iterator(); while(vvi.hasNext()){ System.out.println(map.get(vvi.next())); } } }
平时集合使用的比较多,熟悉集合类,有时会意想不到的效果哦.
标签:style blog color io 使用 java ar for div
原文地址:http://www.cnblogs.com/fylx/p/3961530.html