17.2. Set集合

Set集合中的元素是无序的、不能重复的。

List集合中的元素是有序的、可重复的,而Set集合中的元素是无序的、不能重复的。List集 合强调的是有序,Set集合强调的是不重复。当不考虑顺序,且没有重复元素时,Set集合和List集 合可以互相替换的。

17.2.1. 常用方法

常用方法 Set接口也继承自Collection接口,Set接口中大部分都是继承自Collection接口,这些方法如下。

  1. 操作元素
add(Object element):在Set集合的尾部添加指定的元素。该方法是从Collection集合继承过来的。
remove(Object element):如果Set集合中存在指定元素,则从Set集合中移除该元素。该方法是从Collection集合继承过来的。
clear():从Set集合中移除所有元素。该方法是从Collection集合继承过来的。
  1. 判断元素
isEmpty():判断Set集合中是否有元素,没有返回true,有返回false。该方法是从
Collection集合继承过来的。
contains(Object element):判断Set集合中是否包含指定元素,包含返回true,不包含返回false。该方法是从Collection集合继承过来的。
  1. 其他
iterator():返回迭代器(Iterator)对象,迭代器对象用于遍历集合。该方法是从Collection集合继承过来的。
size():返回Set集合中的元素数,返回值是int类型。该方法是从Collection集合继承过来的。

HelloWorld2.java

package com.a51cto;

import java.util.HashSet;
import java.util.Set;

public class HelloWorld2 {
 public static void main(String[] args) {
  Set set = new HashSet();
  String b = "B";

//  向集合中添加元素
  set.add("A");
  set.add(b);
  set.add("C");

  set.add(b);
  set.add("D");
  set.add("E");

//  打印集合元素个数
  System.out.println("集合size =" + set.size());
//  打印集合
  System.out.println(set);

//  删除结合中第一个“B”元素
  set.remove(b);

//  判断集合中是否包含“B”元素
  System.out.println("是否包含\"B\":" + set.contains(b));
//  判断是否为空集合
  System.out.println("set集合是空的:" + set.isEmpty());

//  清空集合
  set.clear();
  System.out.println(set);
 }

}

/*
 * 集合size =5
 * [A, B, C, D, E]
 * 是否包含"B":false
 * set集合是空的:false
 * []
 */

17.2.2. 创建HashSet类

无序,且不能重复

HashSetDemo.java

package com.a51cto;

// 导入HashSet包
import java.util.HashSet;
import java.util.Iterator;

public class HashSetDemo {
 public static void main(String[] args) {
  boolean r;
//  创建一个存放String对象的HashSet集合对象s
  HashSet<String> s = new HashSet<String>();

//  然后向其中添加4个字符串
  r=s.add("Hello");
  System.out.println("添加单词Hello,返回值 "+ r);

  r=s.add("hujianli1");
  System.out.println("添加单词hujianli1,返回值 "+ r);

  r=s.add("hujianli2");
  System.out.println("添加单词hujianli2,返回值 "+ r);

  r=s.add("Hello");
  System.out.println("添加单词Hello,返回值 "+ r);

  System.out.println("遍历集合中的元素");

  for(String em:s)
   System.out.println(em);
 }

}

/**
 添加单词Hello,返回值 true
添加单词hujianli1,返回值 true
添加单词hujianli2,返回值 true
添加单词Hello,返回值 false
遍历集合中的元素
Hello
hujianli1
hujianli2
 */

17.2.3. 创建TreeSetDemo类

有序,且不能重复

TreeSetDemo.java

package com.a51cto;

import java.util.TreeSet;

// 导入HashSet包


public class TreeSetDemo {
 public static void main(String[] args) {
  boolean r;
//  创建一个存放String对象的TreeSet集合对象s
   TreeSet<String>s = new TreeSet<String>();

//  然后向其中添加4个字符串
  r=s.add("Hello");
  System.out.println("添加单词Hello,返回值 "+ r);

  r=s.add("hujianli1");
  System.out.println("添加单词hujianli1,返回值 "+ r);

  r=s.add("hujianli2");
  System.out.println("添加单词hujianli2,返回值 "+ r);

  r=s.add("Hello");
  System.out.println("添加单词Hello,返回值 "+ r);

  System.out.println("遍历集合中的元素");

  for(String em:s)
   System.out.println(em);
 }

}

/**
 *

 添加单词Hello,返回值 true
添加单词hujianli1,返回值 true
添加单词hujianli2,返回值 true
添加单词Hello,返回值 false
遍历集合中的元素
Hello
hujianli1
hujianli2
 */

17.2.4. Set集合的遍历

HelloWorld4.java

package com.a51cto;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class HelloWorld4 {
 public static void main(String[] args) {
  Map map = new HashMap();

//  向集合中添加元素
  map.put(102, "张三");
  map.put(105, "李四");
  map.put(106, "王五");
  map.put(107, "董6");
  map.put(112, "李四");

//  使用for-each循环遍历
  System.out.println("-----1.使用for-each循环遍历------");
  Set keys = map.keySet();
  for (Object key : keys) {
   int ikey = (Integer) key; // 自动拆箱
   String value = (String) map.get(ikey); // 自动装箱
   System.out.printf("key=%d -value=%s \n", ikey, value);
  }

  // 2.使用迭代器遍历
  System.out.println("-----2.使用迭代器遍历-------");
  // 获得值集合
  Collection values = map.values();
  // 遍历值集合
  Iterator it = values.iterator();
  while (it.hasNext()) {
   Object item = it.next();
   String s = (String) item;
   System.out.println("值集合元素: " + s);

  }

 }
}


/*-----1.使用for-each循环遍历------
key=112 -value=李四
key=102 -value=张三
key=105 -value=李四
key=106 -value=王五
key=107 -value=董6
-----2.使用迭代器遍历-------
值集合元素: 李四
值集合元素: 张三
值集合元素: 李四
值集合元素: 王五
值集合元素: 董6*/