java.util包有很多实用的类、接口和异常。
向量类,堆栈类,哈希表,枚举接口,日历类,随机函数类,映射接口和属性类。
Vector类
vector是异构的,可以存储不同的对象,同时可以动态增加存储容量
所有向量操作都是针对Object类进行的,要将从向量空间取回的Object对象进行向下转型。
元素个数小于等于容量。
只能放进对象,基本数据类型要使用其包装类。
常用方法
方法 | 说明 |
Vector() | 构造空向量 |
Vector(int initialCapacity) | 初始化指定大小的向量 |
Vector(int initialCapacity,int capacityIncrement) | capacityIncrement 每次扩充的值: 0 每次扩充一倍 |
add() | 添加元素 |
addElement() | 添加到末尾 |
capacity() | 返回容量大小 |
clear() | 清空 |
elementAt() | 返回指定位置的对象元素 |
elements() | 返回允许访问的每个向量元素的对象 |
firstElement() | 返回第一个对象元素 |
get() | 返回指定位置的对象元素 |
indexOf() | 查找指定对象元素的位置, 不存在返回-1 |
isEmpty() | 判断是否为空 |
remove() | 清除指定位置或者对象的元素 |
removeAllElements() | 清除所有元素 |
setElementAt() | 在指定位置设置指定的对象元素,覆盖原来的 |
setSize() | 设置容量大小 |
size() | 返回元素个数 |
trimToSize() | 设置实际容量为内部的缓存容量 |
toArray() | 返回向量元素数组 |
subList() | 返回向量位置 |
removeElementAt() | 删除index所指的地方的对象 |
例子
import java.util.Vector; public class VectorDemo { public void test(){ Vector vectTemp = new Vector(4,3); System.out.println("元素个数: " + vectTemp.size()); System.out.println("容量大小: " + vectTemp.capacity()); // 添加元素 vectTemp.add(new Integer(3)); vectTemp.addElement(new Double(4.0)); vectTemp.insertElementAt(new Float(5.0f),1); vectTemp.add("hello world"); vectTemp.add("wkk"); System.out.println("元素个数: " + vectTemp.size()); System.out.println("容量大小: " + vectTemp.capacity()); // toString() 会将所有元素按照字符串输出 System.out.println(vectTemp.toString()); // 第2个元素 System.out.println(vectTemp.get(2)); } public static void main(String[] args) { new VectorDemo().test(); } }
Stack类
后进先出: LIFO
可以接收任何类型对象
常用方法
方法 | 说明 |
Stack() | 构造空堆栈 |
empty() | 判断是否为空 |
peek() | 取得堆栈顶端的元素 |
pop() | 删除堆栈顶端的元素,并返回 |
push(Object item) | 入栈 |
search(Object item) | 检查堆栈中中是否有指定的对象 |
例子
import java.util.Stack; public class StackDemo { public void test(){ Stack stkTemp = new Stack(); System.out.println("堆栈是否为空: "+stkTemp.empty()); stkTemp.push(new Integer(2)); stkTemp.push("wkk"); // 查看元素位置 System.out.println("元素wkk位置:" + stkTemp.search("wkk")); System.out.println("元素2位置:" + stkTemp.search(new Integer(2))); // 栈顶元素 peek System.out.println(stkTemp.peek()); System.out.println(stkTemp.peek()); //栈顶元素 pop System.out.println(stkTemp.pop()); System.out.println(stkTemp.pop()); } public static void main(String[] args) { new StackDemo().test(); } }
- 栈顶元素所处位置为 1
- 栈顶的下一个元素的位置为 2
Hashtable类
Dictionary类是一个抽象类,为字典表提供了一个统一的接口。
Hashtable 是一个键值对集合, 是抽象类Dictionary的一个具体实现,可以存储任意对象。
常用方法
方法 | 说明 |
Hashtable() | 构造空的哈希表 |
clear() | 清空 |
containsKey() | 对象是否是表中的关键字 |
containsValue() | 对象是否是表中的值 |
elements() | 返回允许访问每个对象元素的对象 |
get() | 根据指定的键返回其对应的值 |
put(Object key, Object value) | 将一组键值对放进表中 |
keys() | 返回允许访问每一个键的对象 |
size() | 键的个数 |
remove() | 依据指定的键删除对应的键值对 |
每一个键唯一对应一个键值对,一个哈希表中的键不能重复
任何一个对象可以充当键,任何一个对象也可以充当值。
例子
import java.util.Hashtable; public class HashtableDemo { public void test(){ Hashtable hshTemp = new Hashtable(); hshTemp.put("001",new Integer(1)); hshTemp.put("002",new Integer(2)); // 元素个数 System.out.println("元素个数: " + hshTemp.size()); // 获取值 System.out.println(hshTemp.get("001")); // 判断是否有值 1 System.out.println("有值1: " + hshTemp.containsValue(new Integer(1))); // 哈希表转换为String System.out.println(hshTemp); } public static void main(String[] args) { new HashtableDemo().test(); } }
Enumeration接口
Enumeration对应着一个对象集合,一般是和Vector, Stack, Hashtable或者其他类共同实现完成。
使用它们的elements()方法来得到元素集合。
iterator 迭代器
常用方法:
方法 | 说明 | |
hasMoreElements() | 判断对象是否有多的元素 | |
nextElement() | 获得对象集合的下一个对象 |
例子
import java.util.Vector; import java.util.Enumeration; public class EnumerationDemo { public void test(){ Vector vctTemp = new Vector(3,2); Enumeration enumTemp ; // 添加字符串 for(int intTemp = 1;intTemp < 4;intTemp++){ String string = "字符串" + intTemp; vctTemp.addElement(string); } enumTemp = vctTemp.elements(); while(enumTemp.hasMoreElements()){ String strElement = (String)enumTemp.nextElement(); System.out.println("元素值: " + strElement); } } public static void main(String[] args) { new EnumerationDemo().test(); } }
Enumeration 是一个接口,所以不能使用new() 方法来定义一个实例
Calendar类
工作原理,从本机电脑系统中取得系统时间、所处时区等数据来得到时间的具体信息。
常用属性
属性 | 说明 |
YEAR | 年 |
MONTH | 月 |
DAY_OF_MONTH | 当月的第几天 |
DAY_OF_WEEK | 当星期的第几天 |
DAY_OF_YEAR | 当前的第几天 |
WEEK_OF_YEAR | 当年的第几周 |
Calendar() | 构造函数,但是是protected的,不能直接new |
getInstance() | 获得日历类的实例 |
get(int field) | 获得某一属性的值,field为日历中定义的属性 |
set(int field) | 设置某一属性的值 |
getTime() | 返回日历所对应的日期(date) |
Clear(int field) | 清除日历类的某一个属性的值 |
例子
import java.util.Calendar; public class CalendarDemo { public void test(){ Calendar cldTemp = Calendar.getInstance(); // 打印基本的日历信息 System.out.println("年:" + cldTemp.get(Calendar.YEAR)); System.out.println("月: " + cldTemp.get(Calendar.MONTH)); System.out.println("日: " + cldTemp.get(Calendar.DATE)); // 具体日历信息 System.out.println("上/下午: " + cldTemp.get(Calendar.AM_PM)); System.out.println("小时: " + cldTemp.get(Calendar.HOUR)); System.out.println("分钟: " + cldTemp.get(Calendar.MINUTE)); System.out.println("秒: " + cldTemp.get(Calendar.SECOND)); System.out.println("毫秒: " + cldTemp.get(Calendar.MILLISECOND)); // 转换为数组 System.out.println("数组: " + cldTemp.toString()); } public static void main(String[] args) { new CalendarDemo().test(); } }
- 整个日历是由一个数组存放的
- 日历类的构造函数是protected的,所以不能直接用new创建,而是用getInstance()获得
Random类
Random类是伪随机数生成器。
常用方法
方法 | 说明 |
Random | 构造方法 |
nextBoolean() | 返回一个boolean变量 true / false |
nextDouble() | 返回一个double数 0.0 - 1.0 |
nextFloat() | 0.0 - 1.0 |
nextInt() | |
nextLong() | |
nextGaussian() | 根据一个伪离散高斯分布生成一个双精度随机数 0.0 - 1.0 |
例子
import java.util.Random; public class RandomDemo { public void test() { Random rndTemp = new Random(); System.out.println("布尔: " + rndTemp.nextBoolean()); System.out.println("double: " + rndTemp.nextDouble()); System.out.println("float: "+ rndTemp.nextFloat()); System.out.println("long: " + rndTemp.nextLong()); System.out.println("int: " + rndTemp.nextInt()); // 10以内整型 System.out.println("int(10以内): " +rndTemp.nextInt(10)); } public static void main(String[] args) { new RandomDemo().test(); } }
- nextInt(n) 返回[0, n) 的整数 -> n>0
Map接口
Map(映射)接口定义了一个框架,用来实现基本的映射数据结构。
Hashtable类实现了Map接口。
Map接口定义了在索引的基础上存储和检索信息的方法,Map接口中的键可以是任何类型。
常用方法:
基本都是针对键和键对应的对象
方法 | 说明 |
clear() | 清除所有 |
containsKey() | 是否有指定的键 |
containsValue() | 是否有指定的值 |
entrySet() | 返回映射对象所对应的集合 |
hashCode() | 返回映射对象本身的哈希码 |
isEmpty() | 是否为空 |
keySet() | 返回键的集合 |
put() | 添加键值对 |
putAll(Map t) | 将已知的映射t中的所有映射添加到本映射中 |
remove() | 根据键删除映射 |
size() | 返回映射个数 |
values() | 返回值的集合 |
Map是一个接口,需要实现。
HashMap类实现了Map接口。
例子
import java.util.HashMap; import java.util.Set; import java.awt.Rectangle; public class HashMapDemo { public void test(){ HashMap hmTemp = new HashMap(); // 构造数组,预存放键对象 Object objectKeyTemp [] = new Object[3]; hmTemp.put("small",new Rectangle(0,0,5,5)); hmTemp.put("midium",new Rectangle(0,0,15,15)); hmTemp.put("large",new Rectangle(0,0,30,30)); // 个数 System.out.println("个数: " + hmTemp.size()); // 是否含有键small System.out.println("是否含有small键: " + hmTemp.containsKey("small")); System.out.println("是否含有Rectangle(0,0,15,15): "+hmTemp.containsValue(new Rectangle(0,0,15,15))); // 返回映射中键的集合 Set setTemp = hmTemp.keySet(); objectKeyTemp = setTemp.toArray(); for (int i = 0; i < objectKeyTemp.length; i++) { if(objectKeyTemp[i] instanceof String) { String s = (String) objectKeyTemp[i]; System.out.println("key的值: " + s); } } } public static void main(String[] args) { new HashMapDemo().test(); } }
Properties类
主要用于读取Java的配置文件
在Java中,其配置文件常为.properties文件,是以键值对的形式进行参数配置的。
Properties类是Hashtable类的子类,有Hashtable类对象的所有方法
常用方法
方法 | 说明 |
getProperty() | 依据指定的键或者值返回属性值 |
load(InputStream inStream) | 从指定的输入流中读取键和其指定对象进行加载 |
propertyNames() | 将属性对象中的键返回到枚举接口 |
setProperty(String key,String value) | 设定属性对象中的一组属性对象对,其中键和值都是String类型 |
store(OutputStream out,String header) | 将属性对象中的属性对象加载到指定的输出流中,同时指定名字 |
例子
配置文件: file.properites
age = 25 name = wkk
package com.wkk; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Enumeration; import java.util.Properties; import java.io.IOException; public class PropertiesDemo { public void test(){ Properties ppTemp = new Properties(); try{ ppTemp.load(new FileInputStream("src/com/wkk/file.properties")); }catch (FileNotFoundException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } Enumeration content = ppTemp.propertyNames(); while(content.hasMoreElements()){ String key = (String)content.nextElement(); String value =ppTemp.getProperty(key); System.out.println(key + ":" + value); } } public static void main(String[] args) { new PropertiesDemo().test(); } }