- 浏览: 27149 次
- 性别:
- 来自: 福州
最新评论
Set集合为集类型,集是最简单的一种集合,存放于集中的对象不按特定方式排序,只是简单地把对象加入集合中,类似于向口袋里放东西。对集中存在的对象的访问和操作是通过对象的引用进行的,因此在集中不能存放重复对象。Set集合包括Set接口以及Set接口的所有实现类。因为Set接口继承了Collection接口,所以Set接口拥有Collection接口提供的所有常用方法。
1. 使用HashSet类
由HashSet类实现的Set集合的优点是能够快速定位集合中的元素。
由HashSet类实现的Set集合中的对象必须是惟一的,因此需要添加到由HashSet类实现的Set集合中的对象,需要重新实现equals()方法,从而保证插入集合中对象的标识的惟一性。
由HashSet类实现的Set集合的排列方式为按照哈希码排序,根据对象的哈希码确定对象的存储位置,因此需要添加到由HashSet类实现的Set集合中的对象,还需要重新实现hashCode()方法,从而保证插入集合中的对象能够合理地分布在集合中,以便于快速定位集合中的对象。
由于Set集合中的对象是无序的,这里所谓的无序并不是完全无序,只是不像List集合按对象的插入顺序保存对象。
例如:
源文件:Person.java
- public class Person{
- private String name;
- private long id_card;
- public Person(String name,long id_card){
- this.name = name;
- this.id_card = id_card;
- }
- public long getId_card(){
- return id_card;
- }
- public void setId_card(long id_card){
- this.id_card = id_card;
- }
- public String getName(){
- return name;
- }
- public void setName(String name){
- this.name = name;
- }
- public int hashCode(){//重新实现hashCode()方法
- final int PRIME = 31;
- int result = 1;
- result = PRIME*result+(int)(id_card^(id_card>>>32));
- result = PRIME*result+((name ==null)?0:name.hashCode());
- return result;
- }
- public boolean equals(Object obj){//重新实现equals()方法
- if(this == obj){
- return true;
- }
- if(obj == null){
- return false;
- }
- if(getClass()!=obj.getClass()){
- return false;
- }
- final Person other = (Person)obj;
- if(id_card!=other.id_card){
- return false;
- }
- if(name == null){
- if(other.name != null){
- return false;
- }
- }
- else if(!name.equals(other.name)){
- return false;
- }
- return true;
- }
- }
源文件:TestSet.java
- import java.util.*;
- public class TestSet{
- public static void main(String args[]){
- Set<Person> hashSet = new HashSet<Person>();
- hashSet.add(new Person("马先生",22015));
- hashSet.add(new Person("李小姐",22018));
- hashSet.add(new Person("李先生",22020));
- Iterator<Person> it = hashSet.iterator();
- while(it.hasNext()){
- Person person = it.next();
- System.out.println(person.getName()+" "+person.getId_card());
- }
- }
- }
程序的运行结果如下:
李小姐 22018
李先生 22020
马先生 22015
如果既想保留HashSet类快速定位集合中对象的优点,又想让集合中的对象按插入的顺序保存,可以通过HashSet类的子类LinkedHashSet实现Set集合,即修改上述代码如下:
将
修改为:
2. 使用TreeSet类
TreeSet类不仅实现了Set接口,还实现了java.util.SortedSet接口,从而保证在遍历集合时按照递增的顺序获得对象。遍历对象时可能是按照自然顺序递增排列,因此存入用TreeSet类实现的Set集合的对象必须实现Comparable接口;也可能是按照指定比较器递增排序,即可以通过比较器对用TreeSet类实现的Set集合中的对象进行排序。
TreeSet类通过实现java.util.SortedSet接口增加的方法如下表4所示:
例如:
源文件:Person.java
- public class Person implements Comparable{
- private String name;
- private long id_card;
- public Person(String name,long id_card){
- this.name = name;
- this.id_card = id_card;
- }
- public String getName(){
- return name;
- }
- public void setName(String name){
- this.name = name;
- }
- public long getId_card(){
- return id_card;
- }
- public void setId_card(long id_card){
- this.id_card = id_card;
- }
- public int compareTo(Object o){//默认按编号升序排序
- Person person = (Person)o;
- int result = id_card>person.id_card?1:(id_card==person.id_card?0:-1);
- return result;
- }
- }
源文件:TestSet.java
- import java.util.*;
- public class TestSet{
- public static void main(String args[]){
- TreeSet<Person> treeSet = new TreeSet<Person>();
- Person p1 = new Person("马先生",22015);
- Person p2 = new Person("李先生",22016);
- Person p3 = new Person("王小姐",22018);
- Person p4 = new Person("尹先生",22020);
- Person p5 = new Person("王先生",22012);
- treeSet.add(p1);
- treeSet.add(p2);
- treeSet.add(p3);
- treeSet.add(p4);
- treeSet.add(p5);
- System.out.println("初始化的集合:");
- Iterator<Person> it = treeSet.iterator();
- while(it.hasNext()){
- Person p = it.next();
- System.out.println(p.getId_card()+" "+p.getName());
- }
- System.out.println("截取前面部分得到的集合:");
- it = treeSet.headSet(p1).iterator();
- while(it.hasNext()){
- Person p = it.next();
- System.out.println(p.getId_card()+" "+p.getName());
- }
- System.out.println("截取中间部分得到的集合:");
- it = treeSet.subSet(p1,p3).iterator();
- while(it.hasNext()){
- Person p = it.next();
- System.out.println(p.getId_card()+" "+p.getName());
- }
- System.out.println("截取后面部分得到的集合:");
- it = treeSet.tailSet(p3).iterator();
- while(it.hasNext()){
- Person p = it.next();
- System.out.println(p.getId_card()+" "+p.getName());
- }
- }
- }
程序的运行结果如下:
初始化的集合:
22012 王先生
22015 马先生
22016 李先生
22018 王小姐
22020 尹先生
截取前面部分得到的集合:
22012 王先生
截取中间部分得到的集合:
22015 马先生
22016 李先生
截取后面部分得到的集合:
22018 王小姐
22020 尹先生
在使用由TreeSet类实现的Set集合时,也可以通过单独的比较器对集合中的对象进行排序。
例如:
比较器既可以作为一个单独的类,也可以作为对应类的内部类,本例中移内部类的形式实现比较器。
源文件:Person.java
源文件:TestSet.java
程序的运行结果如下:
客户化排序前,默认按编号升序排序:
22015 马先生
22016 李先生
22018 王小姐
客户化排序后,按编号降序排序:
22018 王小姐
22016 李先生
22015 马先生
发表评论
-
基础数据结构——图
2010-09-20 15:49 875图(Graph)G由两个 ... -
基础数据结构——树
2010-09-20 15:48 794树:T={K,R}。K是包含n个结点的有穷集合(n ... -
基础数据结构——栈和队列
2010-09-20 15:40 745所谓的栈,是一个含有至少两个基本操作的抽象数据类型 ... -
基本数据结构——数组和链表
2010-09-20 15:38 1181数组的这个可 ... -
集合框架——Map
2010-09-20 15:28 782Map集合为映射 ... -
集合框架——List
2010-09-20 15:16 1142List集合为列表类型,列表的主要特征是存放其中的 ... -
集合框架——Collection
2010-09-20 15:12 666Collection接口是List接口和Set接口 ... -
Object
2010-09-20 12:09 786java.lang.Object类是所有Java类的最高层次 ... -
Java的7个基础问题
2010-09-20 12:08 547问题一:我声明了什么! Java代码 ... -
堆和栈的区别
2010-09-20 12:06 615栈与堆都是Java用来在Ram中存放数据的地方。 与C++不同 ... -
Comparable和Comparator
2010-09-20 09:22 509public interface Comparable&l ... -
如何使用异常的原则(转)
2010-09-17 15:00 444作者:Bill Venners著,chenkw 译 摘要 ... -
异常的捕获与抛出原则(转)
2010-09-17 14:58 686在可能会出现exception的 ... -
J2EE系统异常的处理准则(转)
2010-09-17 11:43 612J2EE系统异常的处理准则 ... -
J2EE项目的异常处理(转)
2010-09-17 11:18 526为什么要在J2EE项目中谈 ... -
集合框架——简介
2010-09-16 14:46 729一、初识: 集合类是 Java基础技术中十分 ... -
异常那点事
2010-09-16 14:05 604一、概述 在Java程序设计语言中,异常对象都是派生自jav ... -
内部类详解
2010-09-16 13:11 638内部类详解 1、定义 ... -
优化JVM参数提高eclipse运行速度(转)
2010-09-16 12:59 574性能优化从身边做起。 首先建立评估体系,将workspac ... -
四个有害的java编码习惯
2010-09-15 19:16 591John O'Hanley 的这篇文章列举了四个有害的java ...
相关推荐
这份资料不仅应该触及Java的基石——例如JVM的工作原理、内存模型、垃圾回收机制,以及Java的集合框架中的核心接口与实现类,如List、Set、Map等,更应对Java的异常处理机制有深入的剖析 此外,考虑到Java技术的...
3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...
3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...
第14章 集合框架——强大的对象管理器 270 14.1 Object类——所有类的超类 270 14.1.1 toString方法的重写 270 14.1.2 equals方法的意义 271 14.1.3 hashCode方法的意义 272 14.2 重写equals与hashCode...
9.2.6 访问List、Set、M印集合 9.2.7 投影与选择 9.3 Struts2的标签库 9.3.1 数据标签的应用 9.3.2 控制标签的应用 9.3.3 表单标签的应用 …… 第10章 邂逅数据库持久化利器 第11章 探秘数据库持久化利器 第12章 ...
14.6.1框架类(JFrame)使用示例469 14.6.2小应用程序(JApplet)使用示例472 14.6.3对话框(JDialog)使用示例473 14.7中间容器476 14.7.1面板(JPanel)使用示例476 14.7.2滚动面板(JScrollPane)使用示例...
7.1 Android View动画框架 163 7.1.1 透明度动画 163 7.1.2 旋转动画 163 7.1.3 位移动画 164 7.1.4 缩放动画 164 7.1.5 动画集合 164 7.2 Android属性动画分析 165 7.2.1 ObjectAnimator 166 7.2.2 ...
7.3.3 基于集合的组件 159 7.3.4 额外的组件 166 7.4 小结 168 第8章 结果 170 8.1 动作之后 170 8.1.1 页面上:如何使用自定义结果组件构建Struts 2 Ajax应用程序 171 8.1.2 实现JSON结果类型 173 8.2 常用的结果...
迭代器Iterator、生成器Generators、不定参数Rest、默认参数Default、解构Destructuring、生成器Generator、代理Proxy,以及几种新类型:Set、Map、WeakSet、WeakMap、集合Collection。 以上提及的新特性只是其中的...
6.4 “桃园三结义”——ssh 2组合开发框架始成 404 6.4.1 spring 2.5集成orm中间件hibernate 3.2 404 6.4.2 spring 2.5集成mvc框架struts 2 411 6.4.3 ssh 2组合框架的基本开发步骤—eportal启程 414 6.5 小结 ...
10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作原理 11.2、在Tomcat中使用数据库连接池 11.3、...
10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作原理 11.2、在Tomcat中使用数据库连接池 ...
10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作原理 11.2、在Tomcat中使用数据库连接池 11.3、...
10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作原理 11.2、在Tomcat中使用数据库连接池 11.3、...
10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作原理 11.2、在Tomcat中使用数据库连接池 ...
10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作原理 11.2、在Tomcat中使用数据库连接池 11.3、...
10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作原理 11.2、在Tomcat中使用数据库连接池 ...
10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作原理 11.2、在Tomcat中使用数据库连接池 ...
Struts——an open-source MVC implementation This article introduces Struts, a Model-View-Controller implementation that uses servlets and JavaServer Pages (JSP) technology. Struts can help you control...
1.1 Microsoft.NET——一场新的革命.4 1.2 .NET 与 C#.6 1.3 C#语言的特点.8 1.4 小 结 .11 第二章 运行环境 全面了解.NET.12 2.1 .NET 结构.12 2.2 公用语言运行时环境与公用语言规范.13 2.3 开 发 ...