JAVA学生培训 下载本文

13、JAVA中的集合类

集合类是一组用于存储一组对象,其中的每个对象称为元素,经常用到的有Vector、Enumeration、ArrayList、Collection、Iterator、Set、List等集合类和接口 VECTOR类与ENUMERATION接口

VECTOR类是JAVA提供的存储结构,可用于保存一系列的对象,由于JAVA不提供动态数组,VECTOR提供了一种与动态数组相近的功能,如果要将如干对象保存到一个数组中,但预先不知道要保存的数目时,VECTOR是一种不错的选择

编程:将键盘上输入的每位数字保存到VECTOR中,然后将各位数字相加

public class TestVector {

public static void main(String[] args) {

Vector v=new Vector();

System.out.println(\); while(true){ }

int sum=0;

Enumeration e=v.elements();//Enumeration是一个接口类,它提供了访问

try{int b=System.in.read();//从键盘读入数据 if(b=='\\r'||b=='\\n')//处理回车换行 break; else{

int number=b-'0';//因为输入的在缓存中是ASCII码,0的ASCII为48 v.addElement(new Integer(number));

}}catch(Exception e){}

众多数据结构的存储的所有数据的抽象机制,通过这种机制就可以使用同一中方式,调用同样的方法名访问各种数据结构中存储的所有数据,这种机制就是下面的循环 }

}

while(e.hasMoreElements()){//返回boolean,有元素为true

Integer intObj=(Integer)e.nextElement();//取出当前对象OBJECT,

要进行转换

sum+=intObj.intValue();//取出对象值相加 }

System.out.println(sum);

注意方法中定义变量必需赋初值

Collection 接口和Iterator接口

Collection接口的使用与vector类似,但Collection中的对象的访问要使用Iterator接口,Iterator的使用与Enumeration相似,这组完全可以代替上面的那组

public class TestCollection {

public static void main(String[] args) {

// TODO Auto-generated method stub ArrayList v=new ArrayList();

System.out.println(\); while(true){

}

}

}

try{int b=System.in.read();//从键盘读入数据 if(b=='\\r'||b=='\\n')//处理回车换行 break; else{

int number=b-'0';//因为输入的在缓存中是ASCII码,0的ASCII为48 v.add(new Integer(number));

}}catch(Exception e){}

int sum=0;

Iterator e=v.iterator();

while(e.hasNext()){//返回boolean,有元素为true

Integer intObj=(Integer)e.next();//取出当前对象 sum+=intObj.intValue();//取出对象值相加 }

System.out.println(sum);

可以看出VECTOR和ARRAYLIST非常相似,什么情况下使用二者,VECTOR中所有方法是线程同步的,并发访问是安全的,而ARRAYLIST线程是不同步的,如果要同步,则需要程序员自己控制

Collection、Set、List接口的区别:

Collection是Set和List接口的父类,是通用性的接口,区别在于,

Collection中各个元素之间没有指定的顺序,可以有重复元素,即无法进行排序,没有顺序,允许有多个NULL对象;

SET中的各个元素对象之间没有指定顺序,但不允许有重复元素,最多允许有一个NULL对象;

LIST中的各个元素对象是有指定顺序的,允许有重复元素和多个NULL对象,可以用于排序 ArrayList也是实现了Collection的类

import java.util.ArrayList; import java.util.Collections; public class Test_Array {

public static void main(String[] args) {

ArrayList al=new ArrayList(); al.add(new Integer(1)); al.add(new Integer(3)); al.add(new Integer(2));

System.out.println(al.toString());

Collections.sort(al);//排序,Collections所有方法是静态的,用于操作集

合类对象,本身不是集合类 System.out.println(al.toString()); }

}

HashTable类

JAVA提供的一种高级数据结构,可以像VECTOR一样动态存储一系列的对象,而且可以为每一个存储对象(称为值)都安排另外一个对象(关键字)与之相关。如存储如干中英文国家名。使用方法是

Hashtable numbers=new Hashtable(); numbers.put(“0ne”,new Integer(1)); numbers.put(“0ne”,new Integer(2)); numbers.put(“0ne”,new Integer(3));

使用PUT方法进行存储,接收关键字和值两个对象,这两个对象都不能是NULL,如果传递的关键字与原来某个关键字相同的话,就用本次传递过来的值去修改原来的,即HASHTABLE不能有重复的关键字

检索方法用GET方法,GET(关键字) Integer n=(Integer)numbers.get(“two”);

用做关键字的类必需覆盖OBJECT.HASHCODE和OBJECT.EQUSLS方法,使用equals来比较两个关键字是否相等,而且hashcode的返回值必需相等(才可以说相等),这个值是对象在内存中的地址以某种方式得到的

编程:使用自定义的类做Hashtable类

public class Hashtable_key {

private String name=null; private int age=0;

Hashtable_key(String name,int age){//千万不能有返回类型 this.name=name; }

public boolean equals(Object obj){

if(obj instanceof Hashtable_key){//判断是不是这种类型的对象,是才可

Hashtable_key th=(Hashtable_key)obj; if(name.equals(th.name)&&age==th.age){ } else

return false; return true;

this.age=age;

以比较 }

}

}

else

return false;

public int hashCode(){

return name.hashCode()+age;//注意Stringbuffer不能用做关键字类 }

public String toString(){//覆盖默认的tostring方法,希望返回是姓名和年龄 return name+\+age; }

import java.util.Enumeration; import java.util.Hashtable; public class Test_Hashtable {

public static void main(String[]args){

Hashtable numbers=new Hashtable();

numbers.put(new Hashtable_key(\,15),new Integer(1));//numbers.put(new Hashtable_key(\,16),new Integer(2));//进行

关键字和关联对象

存储,接收关键字和值两个对象

numbers.put(new Hashtable_key(\,17),new Integer(3));

Enumeration e=numbers.keys();//取出HASTHTBLE关键字集合,返回所有的while(e.hasMoreElements()){//取出每个关键字 Hashtable_key hk=(Hashtable_key)e.nextElement();

System.out.print((hk+\));//转换成字符串打印,hk有一个默认的System.out.println(numbers.get(hk));//与关键字对于的值,直接取,

关键字

tostring方法,前面不覆盖的话,就不是希望的返回 不用比较

//注意,前面的equals和hashCode方法是由get来调用的 }

System.out.println(numbers.get(new

//new Hashtable_key(\产生的关键值对象与HASHTBLE中存储

Hashtable_key(\,15)));

的关键值对象是两个完全不同的对象,我们看来是相等,但程序不知道,所以我们要用方法去覆盖,因为这里涉及到比较 } }

15、Properties类

是HASHBATBL的子类,将其中的关键字和值保存到文件中和从文件中读取关键字和值到HASHTABLE对象中的方法

要用Properties.store(关键字,值),都要是String类型 编程:记录程序运行某个文件次数,每次启动时打印处理

import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Properties; public class Properties_File {

public static void main(String[] args) {

Properties settings=new Properties(); try{

settings.load(new FileInputStream(\));//从文件中读取运

行次数