java中set接口的用法

java中的set接口有如下的特点:

  • 不允许出现重复元素;
  • 集合中的元素位置无顺序;
  • 有且只有一个值为null的元素。

因为java中的set接口模仿了数学上的set抽象,所以,对应的数学上set的特性为:

  • 互异性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。
  • 无序性:一个集合中,每个元素的地位都是相同的,元素之间是无序的。集合上可以定义序关系,定义了序关系后,元素之间就可以按照序关系排序。但就集合本身的特性而言,元素之间没有必然的序。
  • 空集的性质:空集是一切集合的子集
     1 package test_set;
     2 
     3 import java.util.ArrayList;
     4 import java.util.HashSet;
     5 import java.util.Iterator;
     6 import java.util.List;
     7 import java.util.Set;
     8 
     9 /**
    10  * @author zaofengchen
    11  * @time 2014年7月21日
    12  */
    13 public class Test_set {
    14 
    15     private static Set<String> sets1 = new HashSet<>();
    16     public static void main(String[] args) {
    17         
    18         save_to_set();
    19 //        save_to_set_from_list();
    20         bianli();
    21 //        binali_sets1_iterator();
    22 //        System.out.print(remove_a_element());
    23     }
    24 
    25     /**
    26      * 往set里面存值
    27      * 方法save_to_set往set里面存进去了两个1,两个3,一个2,一个null,
    28      * 但是遍历的结果为null,1,2,3;且显示顺序与存储顺序无关,
    29      * 体现了集合的互异性、无序性的特性。
    30      * 有因为set里面可以存储空值,且因为set有互异性,所以只能存储一个空值。
    31      */
    32     public static void save_to_set(){
    33         sets1.add("1");
    34         sets1.add("");
    35         sets1.add("3");
    36         sets1.add("1");
    37         sets1.add("3");
    38         sets1.add("2");
    39     }
    40     /**
    41      * 遍历一个set
    42      */
    43     public static void bianli(){
    44         for(String s1 : sets1){
    45             System.out.print(s1+"\t");
    46         }
    47     }
    48     
    49     /**
    50      * 把一个list存到一个set中
    51      */
    52     public static void save_to_set_from_list(){
    53         List<String> lists = new ArrayList<>();
    54         lists.add("1");
    55         lists.add("2");
    56         lists.add("3");
    57         lists.add("4");
    58         lists.add("5");
    59         lists.add("3");
    60         
    61         sets1.addAll(lists);
    62     }
    63 
    64     /**
    65      * 从set中删除一个元素
    66      */
    67     public static boolean remove_a_element(){
    68         return sets1.remove("1");
    69     }
    70     /**
    71      * 使用Iterator遍历set
    72      */
    73     public static void binali_sets1_iterator(){
    74         Iterator<String> ite = sets1.iterator();
    75         while(ite.hasNext()){
    76             System.out.print(ite.next()+"\t");
    77         }
    78     }
    79
 1 package test_set;
 2 
 3 import java.util.ArrayList;
 4 import java.util.HashSet;
 5 import java.util.Iterator;
 6 import java.util.List;
 7 import java.util.Set;
 8 
 9 /**
10  * @author Qiaofengbo
11  * @time 2014年7月21日
12  */
13 public class Test_set {
14 
15     private static Set<String> sets1 = new HashSet<>();
16     public static void main(String[] args) {
17         
18         save_to_set();
19 //        save_to_set_from_list();
20         bianli();
21 //        binali_sets1_iterator();
22     }
23 
24     /**
25      * 往set里面存值
26      */
27     public static void save_to_set(){
28         sets1.add("1");
29         sets1.add("");
30         sets1.add("3");
31         sets1.add("1");
32         sets1.add("3");
33         sets1.add("2");
34     }
35     /**
36      * 遍历一个set
37      */
38     public static void bianli(){
39         for(String s1 : sets1){
40             System.out.print(s1+"\t");
41         }
42     }
43     
44     /**
45      * 把一个list存到一个set中
46      */
47     public static void save_to_set_from_list(){
48         List<String> lists = new ArrayList<>();
49         lists.add("1");
50         lists.add("2");
51         lists.add("3");
52         lists.add("4");
53         lists.add("5");
54         lists.add("3");
55         
56         sets1.addAll(lists);
57     }
58 
59     /**
60      * 使用Iterator遍历set
61      */
62     public static void binali_sets1_iterator(){
63         Iterator<String> ite = sets1.iterator();
64         while(ite.hasNext()){
65             System.out.print(ite.next()+"\t");
66         }
67     }
68 }

set为继承自collection接口的接口,set里存储的值的类型通过set<object>泛型来声明;存储值时调用HashSet类的add方法,删除时调用用remove方法。

save_to_set方法往set里面存进去了两个1,两个3,一个2,一个null,但是遍历的结果为null,1,2,3;且显示顺序与存储顺序无关,体现了集合的互异性、无序性的特性。因为set里面可以存储空值,且因为set有互异性,所以只能存储一个空值。
save_to_set_from_list方法作用是调用addAll方法往set里面存储值,参数为一个collection容器,比如list容器,此方法可用于从list重筛选出重复的元素。
binali_sets1_iterator方法遍历set除了用for循环外,还可以使用Hashset类中的iterator方法,返回一个装有set容器无序元素的迭代器,然后再调用迭代器iterator方法hashnext和next来遍历元素。

posted @ 2014-07-21 15:19  TimeStory  阅读(2354)  评论(0编辑  收藏  举报