Java学习笔记---集合(一)Set

     Java为数据结构中的集合定义了一个接口java.util.Set,它有三个实现类分别是HashSet、LinkedHashSet和TreeSet。

     Set的特点:不允许元素重复,而不维护元素的顺序。加入的元素必须定义equals()方法来确保对象唯一性;

     HashSet采用散列函数对元素进行排序,是专门为快速查询而设计的,存入HashSet的对象必须定义hashCode方法;

     TreeSet采用红黑树的数据结构进行排序元素,使用它可以从Set中提取有序(升序或降序)的序列.。需要注意的是,存入自定义类时,TreeSet需要维护元素的存储顺序,因此自定义类要实现Comparable接口并定义compareTo方法;

     LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素的插入的次序,在使用迭代器遍历Set时,结果会按元素插入的次序显示。

     下面的源代码是关于HashSet、LinkedHashSet和TreeSet实现操作的代码

package corejava;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
/**
 * 测试Set
 * */
public class TestSet {//测试使用Set的三个实现类HashSet、TreeSet和LinkedHashSet
	public static void initSet(Set<String> set){//初始化Set的元素,其实该方法中的代码可以放到每个调用的方法
		//,这个initSet方法只是为了防止重复代码而把重复的添加集合元素的代码给提取出来做了一个初始化方法
		if(set!=null){
			set.add("中央电视台");
			set.add("湖南卫视");
			set.add("新闻频道");
			set.add("电影频道");
			set.add("少儿节目");
		}
	}
	public static void display(Set set){//输出set的元素
		if(set!=null&&set.size()>0){
			Iterator<String> it=set.iterator();//获得迭代器Iterator
			while(it.hasNext()){//循环获得Set中的每个元素
				System.out.print(it.next()+" ");
			}
		}else{
			System.out.println("没有元素! ");
		}
	    System.out.println();
	}
	public static void showHashSet(){//使用HashSet操作元素
		Set<String> hashset=new HashSet<String>();
		initSet(hashset);//调用initSet方法,初始化元素
		System.out.println("使用HashSet操作元素:");
		display(hashset);
	}
	public static void showTreeSet(){//使用TreeSet操作元素
		Set<String> treeset=new TreeSet();
		initSet(treeset);//调用initSet方法,初始化元素
		System.out.println("使用TreeSet操作元素:");
		display(treeset);
	}
	public static void showLinkedHashSet(){//使用LinkedHashSet操作元素
		Set<String> linkedHashSet=new LinkedHashSet<String>();
		initSet(linkedHashSet);//调用initSet方法,初始化元素
		System.out.println("使用LinkedHashSet操作元素:");
		display(linkedHashSet);
	}
public static void main(String[] args) {
	//遍历HashSet、TreeSet和LinkedHashSet中的元素
	showHashSet();
	showTreeSet();
	showLinkedHashSet();
	//测试往HashSet中加入重复元素
	Set<String> hashSet=new HashSet<String>();
	initSet(hashSet);
	hashSet.add("中央电视台");//Set不允许元素重复
	hashSet.add("少儿节目");
	System.out.println("为hashSet加入中央电视台、少儿节目元素之后: ");
	display(hashSet);
	//测试删除HashSet中的元素
	hashSet.remove("中央电视台");
	System.out.println("hashSet删除一个元素xxx之后");
	display(hashSet);
	List<String> list=new ArrayList<String>();//创建一个列表
	list.add("少儿节目");
	list.add("少儿节目");//列表中可以加入重复元素
	list.add("中央电视台");
    hashSet.addAll(list);//hashSet中加入list列表中的元素
    System.out.println("hashSet添加一个集合中所有的元素之后 ");
    display(hashSet);
    hashSet.retainAll(list);//删除除列表中元素之外的所有元素
    System.out.println("hashSet删除了列表之外的元素后: ");
    display(hashSet);
    hashSet.removeAll(list);//删除集合中的元素
    System.out.println("hashSet删除了列表的元素后: ");
    display(hashSet);
    System.out.println("hashSet中当前元素的个数: "+hashSet.size());
    System.out.println("hashSet中当前元素为0? "+hashSet.isEmpty());
}
}


你可能感兴趣的:(集合,set)