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();
}
}