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编写的程序:
2.用ArrayList编写的程序:
3.用LinkedList编写的程序:
4.用HashSet编写的程序:
5.用LinkedHashSet写的程序:
6.用TreeSet写的程序: 这是Perion类 其中包含一些属性和方法:
在本程序中有两处被注释掉了 在此我解释下,在TreeSet中存储的元素必须是可排序的,如果向其中存储对象,必须给定排序的方法,本程序给了最常用的三种方法: 1.在Perion类中重写CompareTo()方法实现可排序 2.在Test005类中利用内部类重写CompareTo()方法实现可排序 3.在Test005类中利用匿名类重写CompareTo()方法实现可排序以上是我学习过程中的一些总结 希望能对大家排除一些疑惑此敬本文出自 “努力学习成就梦想” 博客,请务必保留此出处http://zhaoyanming.blog.51cto.com/7609220/1257327
首先介绍集合的所有实现:
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
相关文章推荐
- Java使用迭代器遍历集合,遍历过程中可删除元素
- Java基础知识强化之集合框架笔记09:Collection集合迭代器使用的问题探讨
- java基础—自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序(java集合六)
- Java常用集合元素使用小结
- 第十章 Scala 容器基础(二十):使用reduce和fold方法遍历集合的所有元素
- 第十章 Scala 容器基础(十五):使用flatten方法来展开一个元素为集合的集合
- 使用Java8增强的Iterator遍历集合元素
- java基础总结七(自定义类型&方法&集合混合使用)
- Scala 容器基础(十七):使用filter方法过滤集合元素
- 01-java基础加强,eclipse工具使用,快捷键,断点调试,单元测试,jdk5新特性,增强for循环,集合map,list,可变参数,枚举,反射,泛型
- Java使用foreach遍历集合元素
- Java基础知识强化之集合框架笔记28:ArrayList集合练习之去除ArrayList集合中的重复字符串元素(升级)
- 第十章 Scala 容器基础(十七):使用filter方法过滤集合元素
- Java基础之集合框架——使用集合Vector<>挑选演员(TryVector)
- Java基础之集合框架——使用HashMap地图(TryPhoneBook1)
- java 集合元素的删除要使用迭代器(Iterator) 笔记
- java语言基础(65)——集合框架(List的使用)
- java 基础总结 -- enum 枚举与接口、泛型、集合的使用
- Java基础知识强化之集合框架笔记42:Set集合之LinkedHashSet的概述和使用
- Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与LinkedHashSet类))