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(\));//从文件中读取运
行次数