接上篇:java集合类(三)About Iterator & Vector(Stack)

之前,在比较java常见集合类的时候,就了解到一点有关Set的特性、实现类及其要求等,读者可以去温习下“java集合类(一)”。Set与Collection接口完全一样('cause 它继承了Collection接口---接口间继承,可以此拓展接口功能,另外,java只能通过接口实现多继承,而抽象类则不行),只是与Collection的行为不一样(多态性表现)。Set保存的是不重复元素,但不保证元素次序,它常被用来测试归属性,即通过对象的值,判断元素是否在某个Set集合内,通常使用HashSet实现,因为HashSet专门对快速查找进行了优化(hashCode()实现)。另外2种常见的Set,TreeSet则实现Comparable接口,以一定的方式对元素进行排序,并用红黑树存储这些元素;LinkedHashSet也使用了hashCode(),但它使用链表来维护元素顺序---即元素的插入顺序。这三者的比较可见下文!下面介绍Set的使用:

  • Talk about “Set”:
All Superinterfaces:Collection<E>, Iterable<E> 
All Known Subinterfaces:NavigableSet<E>, SortedSet<E>
All Known Implementing Classes:AbstractSet, ConcurrentSkipListSet, CopyOnWriteArraySet, EnumSet, HashSet, JobStateReasons, LinkedHashSet, TreeSet
1.Set 的常规使用:
//demo from <Thinking in java>
import java.util.*; public void setdemo(){
Random r = new Random(30);
Set<Integer> set = new HashSet<Integer>();
for(int i = 0; i<10000; i++)
set.add(r.nextInt(20));
System.out.println(set);
}
/*output:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 16, 19, 18]
*/

  上面实例只对add()进行,因为Set跟之前的Collection差不多,其他方法便不再一一演示。在上面代码中使用了Random进行对Set元素的添加,这里就顺便用Set实现“在特定范围内,确保每次产生不同的随机数”

//Random 5 different nums between 10~100 every time

import java.util.*;

public void randomdemo(){
HashSet<Integer> hs = new HashSet<Integer>();
while (true) {
int a = (int)(Math.random() * 100);
if(a >= 10 && a <= 100) {
hs.add(a);
}
if (hs.size() == 5) {
break;
}
}
System.out.println(hs);
}
//output:[23, 97, 82, 41, 30]
  • 关于使用Set测试元素的归属性,主要采用的是contains()及其相关方法,用法跟其他前面提及的java集合类差不多,这里也不作实例演示。  
  • 三种常用Set实现类的比较:

1)HashSet:  为快速查找而设计的set,存入HashSet的元素必须定义hashCode(),编程中一般使用这种(对元素顺序无要求时)

2)TreeSet: 保持次序的Set,底层结构为红黑树,使用它可以从Set中提取有序序列,存入其中的元素必须实现Comparable接口

3)LinkedHashSet:具有HashSet的查询速度,使用链表维护元素的顺序(即插入顺序),元素必须定义hashCode()

注:关于hashCode(),以后有时间再跟读者详细讨论,现在只需知道:在这里,它是为快速查找而必须实现的方法!

2.About SortedSet:

All Superinterfaces:Collection<E>, Iterable<E>, Set<E>
All Known Subinterfaces:NavigableSet<E>
All Known Implementing Classes:ConcurrentSkipListSet, TreeSet
  • 有关SortedSet的方法:
    1)Comparator comparator():Returns the comparator used to order the elements in this set, or null if this set uses the natural ordering of its elements

2)Object first():Returns the first (lowest) element currently in this set

3)Object last():Returns the last (highest) element currently in this set

4)SortedSet subSet(fromelement,toelement):

Returns a view of the portion of this set whose elements range from fromElement, inclusive, to toElement, exclusive

5)SortedSet headSet(toelement):Returns a view of the portion of this set whose elements are strictly less than toElement

6)SortedSet tailSet(fromelement):Returns a view of the portion of this set whose elements are greater than or equal to fromElement

  • SortedSet的示例:
import java.util.*;

public void sortedsetdemo(){
SortedSet<String> sortedset = new TreeSet<String>();
Collections.addAll(sortedset, "1 2 3 4 5".split(" "));
System.out.println(sortedset);
System.out.println(sortedset.first());
System.out.println(sortedset.last());
System.out.println(sortedset.subSet("1","4"));
System.out.println(sortedset.headSet("3"));
System.out.println(sortedset.tailSet("2"));
} 

输出:

[1, 2, 3, 4, 5]
1
5
[1, 2, 3]
[1, 2]
[2, 3, 4, 5]

下一节学习“java集合类(五)About Map”!

###    学习从来都是一个过程,对对错错对对...若文中有错误,还望读者批评指出      ###

java集合类(四)About Set的更多相关文章

  1. 做JavaWeb开发不知Java集合类不如归家种地

    Java作为面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储.但是使用数组存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容 ...

  2. 【转载】Java集合类Array、List、Map区别和联系

    Java集合类主要分为以下三类: 第一类:Array.Arrays第二类:Collection :List.Set第三类:Map :HashMap.HashTable 一.Array , Arrays ...

  3. Java集合类中的哈希总结

    JAVA集合类中的哈希总结 目 录 1.哈希表 2.Hashtable.HashMap.ConcurrentHashMap.LinkedHashMap.TreeMap区别 3.Hashtable.Ha ...

  4. Java集合类: Set、List、Map、Queue使用场景梳理

    本文主要关注Java编程中涉及到的各种集合类,以及它们的使用场景 相关学习资料 http://files.cnblogs.com/LittleHann/java%E9%9B%86%E5%90%88%E ...

  5. Java集合类: Set、List、Map、Queue使用

    目录 1. Java集合类基本概念 2. Java集合类架构层次关系 3. Java集合类的应用场景代码 1. Java集合类基本概念 在编程中,常常需要集中存放多个数据.从传统意义上讲,数组是我们的 ...

  6. 基础知识《六》---Java集合类: Set、List、Map、Queue使用场景梳理

    本文转载自LittleHann 相关学习资料 http://files.cnblogs.com/LittleHann/java%E9%9B%86%E5%90%88%E6%8E%92%E5%BA%8F% ...

  7. java集合类(五)About Map

    接上篇“java集合类(四)About Set” 这次学完Map之后,就剩队列的知识,之后有关java集合类的学习就将告一段落,之后可能会有java连接数据库,I/O,多线程,网络编程或Android ...

  8. java集合类(三)About Iterator & Vector(Stack)

    接上篇:java集合类学习(二) Talk about “Iterator”: 任何容器类,在插入元素后,还需要取回元素,因为这是容器的最基本工作.对于一般的容器,插入有add()相关方法(List, ...

  9. java中四种引用类型

    java中四种引用类型  今天看代码,里面有一个类java.lang.ref.SoftReference把小弟弄神了,试想一下,接触java已经有3年了哇,连lang包下面的类都不了解,怎么混.后来在 ...

随机推荐

  1. 关于arraylist.remove的一些小问题。

    public static void main(String[] args) { // TODO Auto-generated method stub ArrayList<Integer> ...

  2. MVC基础知识-持续更新....

    1.如何在自动生成的视图中显示需要的字段名称: 在相应的定义字段中添加Display,例如: [Display(Name = "用户名:")] public string User ...

  3. 什么叫wipe,安卓用户如何去wipe?

    一.wipe是什么意思 wipe从英文单词的字面意思来理解就是:揩,擦;揩干,擦净的意思,从刷机爱好者的专业角度来理解可以认为是一种对手机数据擦除的操作.关于wipe是什么意思比较专业的解答为:wip ...

  4. 智捷公开课马上开始了-欢迎大家一起讨论学习-第一系列读《Swift开发指南(修订版) 》看Swift视频教程

    引用: 智捷课堂携手51CTO学院.图灵教育联合举办iOS线上培训就业班系列体验公开课. 分享移动开发.移动设计方向最新,最热,最抢眼技术热点以及设计经验.我们每周将最少举办一次公开课,同时会提前安排 ...

  5. TreeView控件的CheckBox级联选中或取消

    背景: 在一个项目开发中遇到这样的要求:当选中树中一个节点时,需要同时选中其父节点,直至根节点.在取消一个节点的选中时,需要将其所有子节点取消选中,直至叶子节点.由于项目用户体验暂时可以不用考虑,直接 ...

  6. band

    #include<iostream> #include<math.h> using namespace std; int calculate(double amount[],i ...

  7. ARC小知识

    ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Reference Counting).简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管 ...

  8. windowsphone 瀑布流&ui虚拟化

    瀑布流已经有点年代了吧,不过wp上还真是挺少资料的.今天抽空把自己之前搞过的东西写出来,避免大家重复劳动. 一.简单的瀑布流排版加入ui虚拟化. 最近看了 段博琼  ui虚拟化的一篇博文,链接:htt ...

  9. Ubantu 安装 LAMP环境

    1.通过 apt-get update 命令从ubantu软件源中下载可安装软件的列表. 2.通过一条命令可以一次性的安装LAMP apt-get install apache2 php5 mysql ...

  10. shiro错误No SecurityManager accessible to the calling code

    Shire在Web.xml中shiroFilter的Mapping配置错误 org.apache.shiro.UnavailableSecurityManagerException: No Secur ...