标签:
1.Set接口
一个不包含重复元素的collecyion。更确切的讲,set不包含满足e1.equals(e2)的元素e1和e2,并且最多包含一个null元素。
2.HashSet
类实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set的迭代顺序:特别是它不保证该顺序恒久不变。此类允许使用null元素。
package com.vince; import java.util.HashSet; import java.util.Set; public class SetDemo { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub HashSetDemo(); } /** * 1.不允许重复值(通过equals方法来判断) * 添加元素时如何判断是否重复,先调用对象的hashCode方法求值,如果hash值在集合中不存在,那么该对象可以添加(不重复的), * 如果hash值相同,(还不能确定对象是否相同,因为不同的对象可能产生相同的hashCode值),那么需要再调用equals方法来验证, * * 如果需要在程序中有这样的需求,两个对象的值相同就认为两个对象是一个对象,并且使用了HashSet来存储,就需要重写对象(类) * 中的hashCode方法和equals方法 */ public static void HashSetDemo(){ System.out.println("----------"); Set<String> set=new HashSet<String>(); set.add("小明"); set.add("小花"); set.add("小明"); System.out.println(set.size());//输出的是2,因为不能为重复值 System.out.println("----------"); Set<Student> set2=new HashSet<Student>(); Student stu1=new Student("小刚",16); Student stu2=new Student("小花",23); Student stu3=new Student("小刚",16); set2.add(stu1); set2.add(stu2); set2.add(stu3);//虽然stu1和stu3的值相同,但是创建了两个内存空间,如果要让stu1和stu3代表同一个对象,则需要重写Student类中的equals方法 set2.add(stu1);//重复值了,所以不输出 System.out.println(set2.size()); System.out.println("----------"); } }
3.TreeSet
基于TreeMap的NavigableSet实现。使用元素的自然顺序对元素进行排序,或者根据创建set时提供的Comparator进行排序,具体取决于使用的构造方法。
标签:
原文地址:http://www.cnblogs.com/shenhainixin/p/5128648.html