您的位置:首页 > 编程语言 > Java开发

Java基础之元素集合的分类及使用

2013-07-25 18:19 253 查看
在Java编程中常会用到集合(Collection),但Java API提供了大量的集合的实现 ,而每种集合的实现又有不同的优点,可以简化我们的编程 。尤其是在各大公司笔试面试时,会出现大量的有关于集合的各种实现的题,而多种实现又容易记混或忘记,导致各种情况的发生。下面是我的一些学习体会和总结,希望能对大家有所帮助。
首先介绍集合的所有实现:
1.Vector
2.ArrayList
3.LinkedList
4.HashSet
5.LinkedHashSet
6.TreeSet
其中Vector、ArrayList、LinkedList实现了List接口,同时List接口有继承了Collection接口。LinkedHashSet继承了HashSet类,HashSet又实现了Set接口,Set接口继承了Collection接口。
接下来介绍集合的所有实现每种所具有的优点:
1.Vector 线程较为安全且支持多线程,但效率不高
2.ArrayList 线程不安全且不支持多线程,常用于需要大量查询的程序,效率较高
3.LinkedList 经常用于需要大量增加或删除数据的程序
4.HashSet 不可向其中插入重复的元素,且插入的元素随机存储
5.LinkedHashSet 此实现与 HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代。注意,插入顺序不 受在 set 中重新插入的 元素的影响。
6.TreeSet 对插入的元素进行排序,排序方法由CompareTo()方法进行定义。
下面是我编写的一些小程序能够更直观的理解Collection的实现的优缺点和注意事项:
1.Vector编写的程序:

package collection;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
public class Test007 {
public static void main(String[] args) {
List<String> list = new Vector<String>();
list.add("A");
list.add("A");
list.add("B");
list.add("C");
list.add("A");
list.add("D");
Iterator<String> ite = list.iterator();
while(ite.hasNext()){
System.out.println(ite.next());
}
System.out.println(list);
Calendar c = Calendar.getInstance();
long l1 = System.currentTimeMillis();
System.out.println(l1);
for(int i=0;i<1000000;i++){
list.add("A");
}
long l2 = System.currentTimeMillis();
System.out.println(l2);
System.out.println("程序运行的时间(单位:毫秒):"+(l2-l1));
}
}
输出的结果为:


2.用ArrayList编写的程序:

package collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Test006 {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("2");
list.add("6");
list.add("7");
System.out.println(list);
Iterator<String> ite = list.iterator();
while(ite.hasNext()){
System.out.println(ite.next());
}
long l1 = System.currentTimeMillis();
System.out.println(l1);
for(int i=0;i<1000000;i++){
list.add("a");
}
long l2 = System.currentTimeMillis();
System.out.println(l2);
long l3 = l2 - l1;
System.out.println("程序运行时间(单位:毫秒):"+l3);
}
}
程序运行的结果为:


3.用LinkedList编写的程序:
package collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class Test006 {
public static void main(String[] args) {
List<String> list = new LinkedList<String>();
list.add("1");
list.add("2");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("2");
list.add("6");
list.add("7");
System.out.println(list);
Iterator<String> ite = list.iterator();
while(ite.hasNext()){
System.out.println(ite.next());
}
long l1 = System.currentTimeMillis();
System.out.println(l1);
for(int i=0;i<1000000;i++){
list.add("a");
}
long l2 = System.currentTimeMillis();
System.out.println(l2);
long l3 = l2 - l1;
System.out.println("程序运行时间(单位:毫秒):"+l3);
}
}
程序运行的结果为:

4.用HashSet编写的程序:
package collection;
import java.util.Calendar;
import java.util.HashSet;
import java.util.Iterator;
public class Test001 {
public static void main(String[] args) {
HashSet<String> hs = new HashSet<String>();
hs.add("one");
hs.add("one");
hs.add("two");
hs.add("three");
hs.add("four");
hs.add("five");
hs.add("five");
System.out.println(hs);
Iterator<String> ite = hs.iterator();
while(ite.hasNext()){
System.out.println(ite.next());
}
System.out.println(hs);
Calendar c = Calendar.getInstance();
long l1 = System.currentTimeMillis();
System.out.println(l1);
for(int i=0;i<1000000;i++){
hs.add("A");
}
long l2 = System.currentTimeMillis();
System.out.println(l2);
System.out.println("程序运行的时间(单位:毫秒):"+(l2-l1));
}
}
程序运行的结果为:


5.用LinkedHashSet写的程序:
package collection;
import java.util.Calendar;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
public class Test001 {
public static void main(String[] args) {
HashSet<String> hs = new LinkedHashSet<String>();
hs.add("one");
hs.add("one");
hs.add("two");
hs.add("three");
hs.add("four");
hs.add("five");
hs.add("five");
System.out.println(hs);
Iterator<String> ite = hs.iterator();
while(ite.hasNext()){
System.out.println(ite.next());
}
System.out.println(hs);
Calendar c = Calendar.getInstance();
long l1 = System.currentTimeMillis();
System.out.println(l1);
for(int i=0;i<1000000;i++){
hs.add("A");
}
long l2 = System.currentTimeMillis();
System.out.println(l2);
System.out.println("程序运行的时间(单位:毫秒):"+(l2-l1));
}
}
程序的运行结果为:

6.用TreeSet写的程序: 这是Perion类 其中包含一些属性和方法:
package collection;
public class Perion /*implements Comparable<Perion>*/{
private String name;
private int  age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int hashCode() {
System.out.println(this.name+"hashcode");
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
System.out.println(this.name+"equals");
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Perion other = (Perion) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
public Perion(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Perion [name=" + name + ", age=" + age + "]";
}
/*public int compareTo(Perion o){
return o.age-this.age;
}*/
}
下面是用TreeSet写的程序,其中TreeSet存储的是Perion对象及属性:
package collection;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class Test005 {
public static void main(String[] args) {
TreeSet<Perion> lt = new TreeSet<Perion>(new Comparator<Perion>(){
@Override
public int compare(Perion o1, Perion o2) {
//              System.out.println(o1.getName()+":"+o2.getName());
return o1.getAge()-o2.getAge();
}
});
Perion p1 = new Perion("zhangsan",30);
Perion p2 = new Perion("lisi",20);
Perion p3 = new Perion("zhangsan",30);
Perion p4= new Perion("liebei",40);
lt.add(p1);
lt.add(p2);
lt.add(p3);
lt.add(p4);
System.out.println(lt);
Iterator<Perion> ite = lt.iterator();
while(ite.hasNext()){
System.out.println(ite.next());
}
long l1 = System.currentTimeMillis();
System.out.println(l1);
for(int i=0;i<1000000;i++){
lt.add(p1);
}
long l2 = System.currentTimeMillis();
System.out.println(l2);
long l3 = l2 - l1;
System.out.println("程序运行时间(单位:毫秒):"+l3);
}
/*static class PerionCom implements Comparator<Perion>{
@Override
public int compare(Perion o1, Perion o2) {
System.out.println(o1.getName()+":"+o2.getName());
return o1.getAge()-o2.getAge();
}
}*/
}
程序的运行结果为:

在本程序中有两处被注释掉了 在此我解释下,在TreeSet中存储的元素必须是可排序的,如果向其中存储对象,必须给定排序的方法,本程序给了最常用的三种方法: 1.在Perion类中重写CompareTo()方法实现可排序 2.在Test005类中利用内部类重写CompareTo()方法实现可排序 3.在Test005类中利用匿名类重写CompareTo()方法实现可排序以上是我学习过程中的一些总结 希望能对大家排除一些疑惑此敬本文出自 “努力学习成就梦想” 博客,请务必保留此出处http://zhaoyanming.blog.51cto.com/7609220/1257327
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐