1.定义

set中不允许放入重复的元素(元素相同时只取一个),使用equals()方法进行比较。如果返回true,两个对象的HashCode值也应该相等

2.方法

add():添加元素

remove():移除指定元素

.......

TreeSet中常用的方法:

first():返回第一个元素,last返回最后一个元素

lower():返回指定元素的上一个元素,higher():指定元素的下一个元素

pollFirst():获取并且移除第一个元素,pollLast():获取并且移除最后一个元素

SortedSet接口的subSet(a,b):返回指定区域的元素,范围为[a,b)

SortedSet接口的headSet(first,b):返回指定元素之前的所有元素,范围为[first,b);tailSet(b,end):返回指定元素后的所有元素,范围为[b,end]

3.常用实现类

HashSet:可以放入空值;向HashSet集合中传入元素时,HashSet会调用该对象的HashCode方法获取Hash值,然后决定存储位置(无序)

LinkedHashSet:HashSet的子类,不允许重复的值,使用HashCode确定在集合中的位置,使用链表的方式确定位置(有序,按照输入的顺序输出)

TreeSet:1.默认情况下,直接使用TreeSet无参构造器创建Set的对象,在其中放入元素时,必须实现Comparable接口(用于排序),按照compareTo方法排序;

2.若创建TreeSet对象时,传入了一个实现Comparator接口的类,则TreeSet使用Comparator接口的compare方法排序.此时集合中的元素无需实现

Comparable接口;如果放入了实现Comparable接口的元素,以Comparator为标准

注:<1>Object类提供的toString方法总是返回该对象实现类的类名+@+hashCode(16进制数)值,可以通过重写toString方法来输出自己希望的形式。

<2>如果把一个对象放入HashSet中时,如果重写该对象equals()方法,也应该重写其hashCode()方法。

4.实例

import static org.junit.Assert.*;
import java.util.Comparator;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;
import org.junit.Test;

public class SetTest {
    @Test  
    // HashSet实现类可以放入空值;向HashSet集合中传入元素时,HashSet会调用该对象的HashCode方法获取Hash值,然后决定存储位置(无序)
    public void testHashSet() {
        Set c1=new HashSet();    
        c1.add(new Customer(1,"AAA"));
        c1.add(new Customer(1,"AAA"));
        c1.add(new Customer(2,"AAA"));
        c1.add(null);
        System.out.println(c1.size());    
        for(Object c:c1){
            System.out.println(c);
        }
    }


    @Test
    //linkedHashSet是HashSet的子类,不允许重复的值,使用HashCode确定在集合中的位置,使用链表的方式确定位置(有序,按照输入的顺序输出)
    public void testLinkedHashSet(){
        Set c2=new LinkedHashSet();
        c2.add(new Customer(1,"AAA"));
        c2.add(new Customer(3,"CCC"));
        c2.add(new Customer(2,"BBB"));
        for(Object c:c2){
            System.out.println(c);
        }        
    }


    @Test  
 /*   TreeSet内部排序:
       默认情况下,直接使用TreeSet无参构造器创建Set的对象,在其中放入元素时,必须实现Comparable接口(用于排序),按照compareTo方法排序*/
    public void testTreeSet1(){
        TreeSet c3=new TreeSet();
        c3.add(new Customer(1,"AAA"));
        c3.add(new Customer(3,"CCC"));
        c3.add(new Customer(2,"BBB"));      
        Customer c31=new Customer(4,"DDD");
        c3.add(c31);
        for(Object c:c3){
            System.out.println(c);
        }
        Object obj;
            //first返回第一个元素,last返回最后一个元素
        obj=c3.first();               
        System.out.println(obj);
            //lower返回指定元素的上一个元素,higher指定元素的下一个元素
        obj=c3.lower(c31);
        System.out.println(obj);
           //SortedSet接口的subSet方法返回指定区域的元素,范围是[a,b)
        Set c32=c3.subSet(c3.first(), c31);
        System.out.println(c32);
           //SortedSet接口的headSet方法返回指定元素之前的所有元素,范围为[first,b);tailSet返回指定元素后的所有元素,范围为[b,end]
        obj=c3.headSet(c31);
        System.out.println(obj);
    }


    @Test
    /*TreeSet内部排序:
       若创建TreeSet对象时,传入了一个实现Comparator接口的类,则TreeSet使用Comparator接口的compare方法排序。此时集合中的元素无需实现Comparable接口;
       如果同时放入了实现Comparable接口的元素,以Comparator为标准。*/
    public void testTreeSet2(){
        Comparator comparator=new CustomerComparator();
        TreeSet c4=new TreeSet(comparator);
        c4.add(new Customer(1,"AAA"));
        c4.add(new Customer(3,"CCC"));
        c4.add(new Customer(2,"BBB"));      
        Customer c41=new Customer(4,"DDD");
        c4.add(c41);
        for(Object c:c4){
            System.out.println(c);
        }  
    }
}

涉及的完整代码:http://www.cnblogs.com/jfl-xx/p/4707643.html

Java集合——Set接口的更多相关文章

  1. Java集合Map接口与Map.Entry学习

    Java集合Map接口与Map.Entry学习 Map接口不是Collection接口的继承.Map接口用于维护键/值对(key/value pairs).该接口描述了从不重复的键到值的映射. (1) ...

  2. java集合类型接口和实现类个人总结

    转载:http://blog.csdn.net/qingchunbusanchang/article/details/39576749 java的集合是一个比较综合的概念,相关的知识有很多的博客里面做 ...

  3. JAVA集合--Iterator接口

        本文首发于cartoon的博客     转载请注明出处:https://cartoonyu.github.io/cartoon-blog     上一篇文章中我在集合元素的遍历中已经有涉及到I ...

  4. JAVA集合--Collection接口

        本文首发于cartoon的博客     转载请注明出处:https://cartoonyu.github.io/cartoon-blog     在概述里面也说过:Collection是jav ...

  5. java集合——Collection接口

    Collection是Set,List接口的父类接口,用于存储集合类型的数据. 2.方法 int size():返回集合的长度 void clear():清除集合里的所有元素,将集合长度变为0 Ite ...

  6. Java集合——Map接口

    1.定义 Map用于保存存在映射关系<key,value>的数据.其中,key值不能重复(使用equals()方法比较),value值可以重复 2.方法 V  put(key,value) ...

  7. Java集合——List接口

    1.定义 List是Collection的子接口,元素有序并且可以重复,表示线性表. 2.方法 add(int index,Object e):在指定索引(和数组下标类似,为0,1,2....)放入元 ...

  8. Java 集合-List接口和三个子类实现

    List List:有序的 collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素.与 ...

  9. Java 集合-Collection接口和迭代器的实现

    2017-10-30 00:30:48 Collection接口 Collection 层次结构 中的根接口.Collection 表示一组对象,这些对象也称为 collection 的元素.一些 c ...

随机推荐

  1. python_way ,day7 面向对象 (初级篇)

    面向对象 初级篇   python支持 函数 与 面向对象   什么时候实用面向对象? 面向对象与函数对比 类和对象 创建类 class 类名 def 方法名(self,xxxx) 类里面的方法,只能 ...

  2. 02~ 一步一步教你使用 SVN之SVN 的介绍

    SVN的介绍 一.学习SVN的主要内容的介绍 1.基本操作:学习SVN有哪些基本操作 2.服务器端的安装配置:SVN中必不可少的2个环境之一,会在下面的课程中介绍服务器如何去安装和配置 3.客户端软件 ...

  3. POJ3009 Curling

    题目链接:http://poj.org/problem?id=3009 题意:从2出发,要到达3, 0可以通过,碰到1要停止,并且1处要变成0, 并且从起点开始沿着一个方向要一直前进,直至碰到1(或者 ...

  4. 转 cocos2dx内存优化

    cocos2dx里面,sprite本身不消耗多少内存,只是关联的材质文件消耗内存.假设有10个sprite关联同一个材质,也不会有10倍消耗. 关于图片占用的材质内存,我觉得还有好几种优化手段:1.对 ...

  5. iOS - Swift iOS 开发体系

    1.iOS 开发技术体系 iOS 开发技术体系图: 层级 主要框架 Cocoa Touch UIKit 等 Media Core Graphics .OpenGl ES.Core Animation ...

  6. org.apache.http.client.CircularRedirectException: Circular redirect to "http://xxx"问题解决

      org.apache.http.client.CircularRedirectException: Circular redirect to "http://xxx"问题解决 ...

  7. 【转】分析Linux和windows动态库

    原文地址:http://www.cnblogs.com/chio/archive/2008/11/13/1333119.html 摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Lin ...

  8. Centos升级Python及pip

    因为CentOS系统中旧版本的Python已被深度依赖,所以不能卸载原有的Python,只能全新安装. 1.从官网下载: wget https://www.python.org/ftp/python/ ...

  9. PHP SPL标准库之SplFixedArray使用实例

    SplFixedArray主要是处理数组相关的主要功能,与普通php array不同的是,它是固定长度的,且以数字为键名的数组,优势就是比普通的数组处理更快. 看看我本机的Benchmark测试: i ...

  10. mustache.js渲染带事件的模板

    http://zccst.iteye.com/blog/2183111 最近遇到这样一个问题,预览内容可点击,问题是通过$.Mustache.render("templateId" ...