对象容器Set
java.util.HashSet实现java.util.Set接口。List容器中的对象可以重复,但Set容器中的对象都是唯一的,Set容器有自己的排序规则。
HashSet的排序方法是利用哈希法,所以加入HashSet容器的对象还必须重新定义hashCode()方法。HashSet根据哈希码来确定对象在容器中存储的位置,也可以根据哈希码来快速找到容器中的对象。
在比较两个加入HashSet容器中的对象是否相同时,会先比较hashCode()方法返回值是否相同。如果相同在使用equals()方法比较。
事实上在定义类时,最好总是重新定义equals()与hashCode()方法。
下面使用HashSet的例子:
package hash;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
public class HashSetDemo {
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入对象:");
String input = scanner.next();
if (input.equals("quit")) {
break;
}
set.add(input);
}
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next() + " ");
}
System.out.println();
}
}
在上面例子中你可以输入两个相同的字符串,也就是两个相同的对象。但是最后显示HashSet里面元素时只显示了一个,这就是Set容器的特性。另外迭代HashSet中所有的值,其顺序与加入容器的顺序是不一样的,迭代顺序是按照HashSet排序后的顺序。
如果想要在迭代的时候按照加入的顺序显示,则可以使用java.util.LinkedHashSet.它在内部是按照哈希码进行排序的,然后允许迭代时行为像LinkedList。如:
package hash;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSetDemo {
public static void main(String[] args) {
Set<String> set = new LinkedHashSet<String>();
set.add("dengjie");
set.add("liuzhongqiu");
set.add("bailong");
set.add("shensha");
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next() + " ");
}
}
}
2. TreeSet
TreeSet实现Set接口与java.util.SortedSet接口,SortedSet提供相关方法让您有序的取出对应位置的对象,像first(),last()方法。它使用红黑树结构来对加入的对象进行排序。
package hash;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
Set<String> set = new TreeSet<String>();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入对象:");
String input = scanner.next();
if (input.equals("quit"))
break;
set.add(input);
}
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next() + " ");
}
System.out.println();
}
}
由于加入的是String对象,执行结果会自动按照字典顺序进行排序的动作。
3. EnumSet
建立枚举类型的集合
package set;
import java.util.EnumSet;
import java.util.Iterator;
public class EnumSetDemo {
enum FontConstant {
Plain, Bold, Italic
}
public static void main(String[] args) {
// 建立枚举值集合
EnumSet<FontConstant> enumSet = EnumSet.of(FontConstant.Plain,
FontConstant.Bold);
// 显示集合内容
showEnumSet(enumSet);
showEnumSet(EnumSet.complementOf(enumSet));
}
public static void showEnumSet(EnumSet<FontConstant> enumSet) {
Iterator iterator = enumSet.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next() + " ");
}
System.out.println();
}
}
上面例子可以指定枚举值加入EnumSet中,使用of()方法会返回一个EnumSet实例,其中包括所指定的枚举值。也可以使用complementOf()指定一个EnumSet的互补集。
因为EnumSet实现了Set接口,可以使用Set接口的方法来测试它所包括的枚举值.例如测试一个集合是否包括FontConstant.Bold:
if(enumSet.contains(FontConstant.Bold))
{
System.out.println("包括FontConstant.Bold");
}
else
System.out.println("不包括FontConstant.Bold");
下面是使用Set接口方法的EnumSet
4. Map类
实现java.util.Map接口的对象会将键(Key)映射至值(Value),值指的是要存入Map容器的对象。在将对象存入Map对象时,需要同时给定一个键,要取回时可以指定键,这样就可以取得与键对应的对象值。Map中的每一个键都是唯一的。Map有自己的排序规则。
4.1 HashMap
Map的特性就是键值对应。就是说要取回一个对象需要一个键对应这个对象。HashMap内部实现的是哈希法。下面是例子:
package map;
import java.util.HashMap;
import java.util.Map;
public class HashMapDemo {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
String key1 = "dengjie";
String key2 = "bailong";
map.put(key1, "dengjie的信息");
map.put(key2, "bailong的信息");
System.out.println(map.get(key1));
System.out.println(map.get(key2));
}
}
可以使用values()方法返回一个实现Collection的对象,其中包括所有的值对象。如果需要一次迭代Map中所有对象,这个会有用。如下:
package map;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class HashMapDemo2 {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("dengjie", "dengjie的信息");
map.put("bailong", "bailong的信息");
map.put("liuzhongqiu", "liuzhongqiu的信息");
map.put("shensha", "shensha的信息");
Collection collection = map.values();
Iterator iterator = collection.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next() + " ");
}
System.out.println();
}
}
浙公网安备 33010602011771号