(1)Collection是集合类的一个顶级接口,其直接继承接口有List与Set
(2)Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。
(1)Collection:集合层次中的根接口,JDK 没有提供这个接口直接的实现类。
(2)Set:不能包含重复的元素。
(3) List:是一个有序的集合,可以包含重复的元素。提供了按索引访问的方式。
(4)Map:包含了 key-value 对。Map 不能包含重复的 key。
List的主要特征使其元素已先行方式存储,集合中允许存放重复对象。List接口主要的实现类包括:
(1)ArrayList:代表长度可变的数组。允许对元素进行快速的随机访问,但是向ArrayList中插入与删除元素的速度较慢。
(2)LinkedList :在实现中采用链表数据结构,元素之间是双链接。对顺序访问进行了优化,向List中插入和删除元素的速度较快,随机访问速度则相对较慢,随机访问是指检索位于特定索引位置元素,当需要快速插入和删除时LinkedList成为List中的不二选择。
(3)Vector :是ArrayList的线程安全版本,性能比ArrayList要低,现在已经很少使用。
3.2.1、ArrayList是个集合
集合是可以往里面添东西的,用add(E e)方法往里面加(把E都看做Object)
例子:ArrayList类中的add和get方法(add方法向集合中添加数据,get方法将集合中指定下标位置的数据取出)
(1)size()方法,返回集合中的元素个数,类似于数组中的length属性
(2)clear()方法,将集合中的所有元素都给清除
(3)isEmpty()方法判断集合是否为空,为空返回true
(4)remove(int index)方法是删除集合中指定位置的元素,清除的原理是你清除了第一个后,后面的元素往前移,第一个变第0个了,原来第三个元素就没啦
(5)remove(Object ob)是remove的重载,一个是根据索引来删除,一个是根据具体对象来删除,比如remove("Hello");
(6)indexOf(Obejct ob)判断某个元素在索引的第几个位置上。
在数组中查看数组元素个数,用数组的length属性,在集合中查看集合元素个数,用集合的size()方法。
3.2.2、ArrayList使用范例
import java.awt.List; import java.util.ArrayList; import java.util.Iterator; /** * @author 林炳文 * @time 2015/2/5 * ArrayList用法示例说明 * */ public class Main { public static void main(String[] args) { //ArrayList用法示例 ArrayList<String> m_ArrayList=new ArrayList<String>(); m_ArrayList.add("Evankaka"); m_ArrayList.add("林炳文"); m_ArrayList.add("德德"); m_ArrayList.add("Evankaka"); m_ArrayList.add("小红"); m_ArrayList.set(2,"文炳林");// 将索引位置为2的对象修改 m_ArrayList.add(3,"秀秀");// 将对象添加到索引位置为3的位置 //ArrayList遍历方法1 Iterator<String> it_ArrayList = m_ArrayList.iterator(); System.out.println("ArrayList遍历方法1"); while (it_ArrayList.hasNext()) { System.out.println(it_ArrayList.next()); } //ArrayList遍历方法2 System.out.println("ArrayList遍历方法2"); for(Object o:m_ArrayList){ System.out.println(o); } //ArrayList遍历方法2 System.out.println("ArrayList遍历方法3"); for(int i = 0; i<m_ArrayList.size(); i++){ System.out.println(m_ArrayList.get(i)); } //删除元素 m_ArrayList.remove("Evankaka"); it_ArrayList = m_ArrayList.iterator(); System.out.println("ArrayList删除元素后的遍历"); while (it_ArrayList.hasNext()) { String m_String=it_ArrayList.next(); if(m_String.equals("秀秀")){ it_ArrayList.remove(); }else{ System.out.println(m_String); } } } }
ArrayList遍历方法1
Evankaka
林炳文
文炳林
秀秀
Evankaka
小红
ArrayList遍历方法2
Evankaka
林炳文
文炳林
秀秀
Evankaka
小红
ArrayList遍历方法3
Evankaka
林炳文
文炳林
秀秀
Evankaka
小红
ArrayList删除元素后的遍历
林炳文
文炳林
Evankaka
小红
3.2.3、ArrayList注意
(1)使用Iterator迭代集合过程中,不可修改集合元素,否则会引发异常。并且Iterator只能向后迭代
(2)如果你想在循环过程中去掉某个元素,只能调用it.remove方法, 不能使用list.remove方法, 否则一定出并发访问的错误.
LinkedList类是链表节点各种操作的实现,LinkedList类实现了一个带有头尾引用的通用型双向链表。注意,此实现不是同步的。如果多个线程同时访问列表,而其中至少一个线程从结构上修改了该列表,则它必须保持外部同步。(结构修改指添加或删除一个或多个元素的任何操作;仅设置元素的值不是结构修改。)这一般通过对自然封装该列表的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedList 方法来“包装”该列表。最好在创建时完成这一操作,以防止对列表进行意外的不同步访问。
set集合中多个对象之间没有明显的顺序,set与Collection的结构基本上完全一样,不同在于set不能包含重复元素。Set判断两个对象相同不是使用==运算符,而是根据equals方法。也就是说主要两个对象用equals方法比较返回true,Set就不会接受这两个对象。 HashSet是Set接口的典型实现,大多数时候使用Set集合就是使用这个类。
HashSet按hash算法来存储集合中的元素,因此具有很好的存储和查找性能。
HaseSet具有以下特点:
● 不能保证元素的排列顺序,顺序有可能发生变化
● HashSet不是同步的,如果多个线程访问同一个HashSet,要注意线程安全问题
● 集合元素值可以为null
当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据该值来决定该对象在HashSet中的存储位置。如果有两个元素通过equals方法比较返回true,但它们的hashCode方法返回值不相等,HashSet将会把它们存储在不同的位置。也就是说HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode方法返回值也相等。
使用范例:
package com.collection; import java.util.Date; import java.util.HashSet; import java.util.Iterator; public class Main { public static void main(String [] args) { HashSet h=new HashSet(); h.add("1st"); h.add("2nd"); h.add(new Integer(3)); h.add(new Double(4.0)); h.add("2nd"); //重复元素,未被添加 h.add(new Integer(3)); //重复元素,未被添加 h.add(new Date()); System.out.println("开始:size="+h.size()); Iterator it=h.iterator(); while(it.hasNext()) { Object o=it.next(); System.out.println(o); } h.remove("2nd"); System.out.println("移除元素后:size="+h.size()); System.out.println(h); } }结果:
开始:size=5
4.0
1st
3
2nd
Mon Feb 16 20:52:17 CST 2015
移除元素后:size=4
[4.0, 1st, 3, Mon Feb 16 20:52:17 CST 2015]
4.2 TreeSet
TreeSet描述的是Set的一种变体——可以实现排序等功能的集合,它在将对象元素添加到集合中时会自动按照某种比较规则将其插入到有序的对象序列中,并保证该集合元素组成时刻按照“升序”排列。
使用范例:
package com.collection; import java.util.TreeSet; import java.util.Iterator; public class Main { public static void main(String [] args) { TreeSet ts=new TreeSet(); ts.add("orange"); ts.add("apple"); ts.add("banana"); ts.add("grape"); Iterator it=ts.iterator(); while(it.hasNext()) { String fruit=(String)it.next(); System.out.println(fruit); } } }
结果:
apple
banana
grape
orange
待续~
原文地址:http://blog.csdn.net/evankaka/article/details/43410013