Java中集合类的使用、区别、总结

来源:互联网 发布:中国农业生产总值数据 编辑:程序博客网 时间:2024/06/05 03:32

1、java中常用的集合类主要有以下几种

List 结构的集合类:

ArrayList类LinkedList类Vector类Stack类

Map结构的集合类:

HashMap类,Hashtable类

Set结构的集合类:

HashSet类,TreeSet类

Queue结构的集合类://对列结构

Queue接口

2、集合类的简单理解就是能动态的为我们添加和修改,为我们提供很多的便利。

3、各个类的简单演示代码如下

(1)演示ArrayList类的简单用法:(ArrayList类的特点是能自动在末尾增加数组的长度)

/* * 功能:演示ArrayList的简单用法 * 作者:zyj0813 * 知识运用:JAVA中集合框架的运用 */package com.Day02;import java.util.*;public class Demo1 {public static void main(String[] args) {//定义一个ArrayList对象ArrayList al=new ArrayList();//显示大小System.out.println("al大小:"+al.size());//向al中加入数据(类型是Object)//创建一个职员Clerk clerk1=new Clerk("宋江",50,1000);Clerk clerk2=new Clerk("吴用",45,1200);Clerk clerk3=new Clerk("林冲",35,1300);//将clerk1加入到al中al.add(clerk1);al.add(clerk2);al.add(clerk3);//如何访问al中的对象for(int i=0;i<al.size();i++){Clerk temp=(Clerk)al.get(i);System.out.println("第"+(i+1)+"个人的信息:"+temp.getName()+","+temp.getAge()+","+temp.getSal());}//如何从al中删除一个对象al.remove(1);System.out.println("======删除=======");//如何访问al中的对象for(int i=0;i<al.size();i++){  Clerk temp=(Clerk)al.get(i);System.out.println("第"+(i+1)+"个人的信息:"+temp.getName()+","+temp.getAge()+","+temp.getSal());}}}//定义一个员工类class Clerk{private String name;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;}public float getSal() {return sal;}public void setSal(float sal) {this.sal = sal;}private int age;private float sal;public Clerk(String name,int age,float sal){this.name=name;this.age=age;this.sal=sal;}}

(2)、演示LinkedList的简单用法:(比ArrayList类多了几个特殊的方法,能从最前面增加数)

/* * 功能:演示LinkedList的简单用法 * 作者:zyj0813 */package com.Day02;import java.util.*;public class Demo3 {public static void main(String[] args) {LinkedList ll=new LinkedList();Emp emp1=new Emp("sa01","aa",1200);Emp emp2=new Emp("sa02","bb",1000);Emp emp3=new Emp("sa01","cc",1200);Emp emp4=new Emp("sa02","dd",1000);ll.add(emp1);//这个是往前面加,和栈的原理类似,这是ArrayList没有的ll.addFirst(emp2);//打印结果for(int i=0;i<ll.size();i++){System.out.println(((Emp)ll.get(i)).getName());}//这个是往后面加ll.addLast(emp3);ll.addLast(emp4);//继续打印结果for(int i=0;i<ll.size();i++){System.out.println(((Emp)ll.get(i)).getName());}}}//雇员类class Emp{//定义员工号private String empNo;private String name;private float sal;//构造函数public Emp(String empNo,String name,float sal){this.empNo=empNo;this.name=name;this.sal=sal;}public String getEmpNo() {return empNo;}public void setEmpNo(String empNo) {this.empNo = empNo;}public String getName() {return name;}public void setName(String name) {this.name = name;}public float getSal() {return sal;}public void setSal(float sal) {this.sal = sal;}}

(3)、Vector的用法和上面两种差不多,简单看一眼:

/* * 功能:演示Vector的简单用法 * 作者:zyj0813 */package com.Day02;import java.util.*;public class Demo3 {public static void main(String[] args) {Vector vv=new Vector();Emp emp1=new Emp("01","aa",1.2f);vv.add(emp1);for(int i=0;i<vv.size();i++){Emp emp=(Emp)vv.get(i);System.out.println(emp.getName());}}}//雇员类class Emp{//定义员工号private String empNo;private String name;private float sal;//构造函数public Emp(String empNo,String name,float sal){this.empNo=empNo;this.name=name;this.sal=sal;}public String getEmpNo() {return empNo;}public void setEmpNo(String empNo) {this.empNo = empNo;}public String getName() {return name;}public void setName(String name) {this.name = name;}public float getSal() {return sal;}public void setSal(float sal) {this.sal = sal;}}

(4)、Stack类的用法和上面大同小异,主要区别的add里Stack(栈) 类是往前面加的,这个用法就是和栈的功能是一样的。

(5)、HashMap类的使用:

/* * 功能:演示HashMap的简单用法 * 作者:zyj0813 */package com.Day02;import java.util.*;public class Demo3 {public static void main(String[] args) {//创建一个HashMap对象HashMap hm=new HashMap();Emp emp1=new Emp("001","aaa",3.4f);Emp emp2=new Emp("002","bbb",5.6f);Emp emp3=new Emp("002","ccc",3.3f);//将emp放入到hmhm.put("001", emp1);hm.put("002", emp2);        /*如果后面加的员工的key值和之前的员工的相同,则此Key值对应的员工信息将被后面加进来的员工信息覆盖,比如下面的emp3将覆盖emp2的信息*/hm.put("002", emp3);//HashMap的查找,通过key值查找,很方便//如果你要查找编号是  002的人if(hm.containsKey("002")){System.out.println("有这个员工");//去处该员工,键     ----值Emp emp=(Emp)hm.get("002");System.out.println("名字:"+emp.getName());}else{System.out.println("没有这个员工");}//遍历HashMap中所有的key和value//Iterator迭代.*注意:这个方法遍历出来是无序的。可能是按照某种规律排序的Iterator it=hm.keySet().iterator();//hasNext()作用是探测是不是到末尾了,返回布尔值while(it.hasNext()){//取出key=键("002")String key=it.next().toString();//因为it.next()返回来是Object(对象)类型,                                //用toString()转成字符串//通过key取出valueEmp emp=(Emp)hm.get(key);System.out.println("名字:"+emp.getName());System.out.println("薪水:"+emp.getSal());}}}//雇员类class Emp{//定义员工号private String empNo;private String name;private float sal;//构造函数public Emp(String empNo,String name,float sal){this.empNo=empNo;this.name=name;this.sal=sal;}public String getEmpNo() {return empNo;}public void setEmpNo(String empNo) {this.empNo = empNo;}public String getName() {return name;}public void setName(String name) {this.name = name;}public float getSal() {return sal;}public void setSal(float sal) {this.sal = sal;}}


(6)、Hashtable 的用法和HashMap的用法基本一致

它们的区别在于以下三点:

1、Hashtable是基于陈旧的Dictionary类的,HashMap是java 1.2引进的Map接口的一个实现。

2、<同步性>    Hashtable是同步的,这个类中的一些方法保证了Hashtable中的对象是线程安全的。而HashMap则是异步的,因此HashMap中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率。

3、值:HashMap可以让你将空值作为一个表的条目的key或者value,但是Hashtable是不能放入空值(null)的。

(7)、ArrayList和Vector的区别

1、同步性:

Vector是同步的,这个类中的一些方法保证了Vector中的对象是线程安全的,而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。

2、数据增长:

从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象,当你向这两种类型中增加元素的时候,如果元素的数目超过了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%。所以记住Vector增长的速度快。

(8 )、总结:

1、如果要求线程安全,使用Vector、Hashtable;

2、如果不要求线程安全,要求提高效率,使用ArrayList、LinkedList、HashMap;

3、如果要求 键值对,使用HashMap、Hashtable;

4、如果要求数据量大,又要考虑线程安全则使用Vector;