所谓有鬼 其实是人们心中有个鬼

让我帮你画个符吧

对象容器Set

     HashSet

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

    }

 

}

posted on 2009-07-27 17:00  鬼话符  阅读(1234)  评论(1)    收藏  举报

导航