Java集合与属性设置全解析
立即解锁
发布时间: 2025-08-18 00:08:24 阅读量: 2 订阅数: 9 

### Java集合与属性设置全解析
#### 1. 获取JComboBox所有项的方法
首先,我们来看一个获取`JComboBox`所有项的方法:
```java
List getAllItems(final JComboBox comboBox)
{
return new
AbstractList()
{
public Object get(int i)
{
return comboBox.getItemAt(i);
}
public int size()
{
return comboBox.getItemCount();
}
};
}
```
这是一个较为高级的技术。使用时,需要明确记录支持哪些“可选”操作。这里要告知调用者,返回的对象是一个不可修改的列表。
#### 2. 传统集合类
Java中有一些从一开始就存在的集合类,包括`Hashtable`类及其有用的`Properties`子类、`Vector`的子类`Stack`和`BitSet`类。
##### 2.1 Hashtable类
`Hashtable`类与`HashMap`用途相同,接口也基本一致。和`Vector`类的方法一样,`Hashtable`的方法是同步的。如果不需要同步或与旧代码兼容,建议使用`HashMap`。
需要注意的是,类名是`Hashtable`,小写的`t`。在Windows系统下,如果使用`HashTable`会出现奇怪的错误信息,因为Windows文件系统不区分大小写,但Java编译器区分。
传统集合使用`Enumeration`接口来遍历元素序列。`Enumeration`接口有两个方法:`hasMoreElements`和`nextElement`,这与`Iterator`接口的`hasNext`和`next`方法类似。
例如,`Hashtable`类的`elements`方法会返回一个用于枚举表中值的对象:
```java
Enumeration e = staff.elements();
while (e.hasMoreElements())
{
Employee e = (Employee)e.nextElement();
...
}
```
有时会遇到需要`Enumeration`参数的旧方法。`Collections.enumeration`静态方法可以返回一个枚举集合中元素的对象。例如:
```java
ArrayList streams = ...; // 输入流序列
SequenceInputStream in = new SequenceInputStream(Collections.enumeration(streams));
```
下面是`java.util.Enumeration`的方法说明:
| 方法 | 描述 |
| ---- | ---- |
| `boolean hasMoreElements()` | 如果还有元素未检查,则返回`true` |
| `Object nextElement()` | 返回下一个要检查的元素。如果`hasMoreElements()`返回`false`,则不要调用此方法 |
在Java编程中,传递集合对象比传递迭代器更明智,因为集合对象更有用,接收者在需要时可以从中获取迭代器,并且可以使用所有集合方法。不过,在一些旧代码中会看到`Enumeration`,因为在Java 2平台引入集合框架之前,它是通用集合唯一可用的机制。
`java.util.Hashtable`和`java.util.Vector`的相关方法如下:
| 类 | 方法 | 描述 |
| ---- | ---- | ---- |
| `java.util.Hashtable` | `Enumeration keys()` | 返回一个遍历哈希表键的枚举对象 |
| `java.util.Hashtable` | `Enumeration elements()` | 返回一个遍历哈希表元素的枚举对象 |
| `java.util.Vector` | `Enumeration elements()` | 返回一个遍历向量元素的枚举对象 |
##### 2.2 属性集
属性集是一种特殊类型的映射结构,具有以下三个特点:
- 键和值都是字符串。
- 表可以保存到文件中,也可以从文件中加载。
- 有一个用于默认值的二级表。
Java平台中实现属性集的类是`Properties`。属性集在指定程序的配置选项时很有用,例如UNIX和DOS中的环境变量。在PC上,`AUTOEXEC.BAT`文件可能包含以下设置:
```plaintext
SET PROMPT=$p$g
SET TEMP=C:\Windows\Temp
SET CLASSPATH=c:\jdk\lib;.
```
在Java中可以这样建模这些设置:
```java
Properties settings = new Properties();
settings.put("PROMPT", "$p$g");
settings.put("TEMP", "C:\\Windows\\Temp");
settings.put("CLASSPATH", "c:\\jdk\\lib;.");
settings.store(System.out, "Environment settings");
```
示例输出如下:
```plaintext
#Environment settings
#Sun Jan 21 07:22:52 1996
CLASSPATH=c:\\jdk\\lib;.
TEMP=C:\\Windows\\Temp
PROMPT=$p$g
```
系统信息也存储在`Properties`对象中,由`System`类的方法返回。应用程序可以完全访问这些信息,但从网页加载的小程序则不行,如果尝试访问某些键会抛出安全异常。以下是打印系统属性的代码:
```java
import java.util.*;
/**
* 此程序打印所有系统属性。
*/
public class SystemInfo
{
public static void main(String args[])
{
Properties systemProperties = System.getProperties();
Enumeration enum = systemProperties.propertyNames();
while (enum.hasMoreElements())
{
String key = (String)enum.nextElement();
System.out.println(key + "=" + systemProperties.getProperty(key));
}
}
}
```
属性集也可用于让用户自定义应用程序。例如,用户可以在`CustomWorld.ini`配置文件中指定以下内容来自定义`NotHelloWorld`程序:
- 窗口大小
- 字体
- 字号
- 背景颜色
- 消息字符串
如果用户未指定某些设置,将提供默认值。`Properties`类有两种提供默认值的机制:
- 查找字符串值时,可以指定一个默认值,当键不存在时自动使用该默认值。例如:
```java
String font = settings.getProperty("FONT", "Courier");
```
- 如果每次调用`getProperty`都指定默认值很繁琐,可以将所有默认值打包到一个二级属性集中,并在查找表的构造函数中提供。例如:
```java
Properties defaultSettings = new Properties();
defaultSettings.put("FONT", "Courier");
defaultSettings.put("SIZE", "10");
defaultS
```
0
0
复制全文
相关推荐










