- 浏览: 199747 次
文章分类
最新评论
-
code_xiaoke:
session可是有30分钟有效期的还有如果在分布式的环境下 ...
Java Web 用户登陆示例代码 -
xul0038:
http://www.baidu.com
Java Web 用户登陆示例代码 -
16866:
非常棒,配置信息呢
Nginx负载均衡 -
开发小菜:
什么意思,没明白?能不能写一个例子
JS 实现DIV随浏览器窗口大小变化
集合在Java里面的作用非凡,我们常用的有Set,List和Map三种,我们先熟悉一下Set,特别是HashSet的使用
1.package collection.lession2;
2.1.import java.util.HashSet;
1.import java.util.Set;
1.1./**
1. *认识Set集合之HashSet。<br>
2. * Set用来保存不允许重复的数据。可以是任何对象类型。<br>
3. * JDK5以后,主类型可以通过autobox 放入Set里面。
4. *
7. */1.public class Lession2 {
2.1. public static void main(String[] args) {
2. // 普通测试1. testNormal();
2.1. // 测试HashSet的特殊性1. testForHashSet();
2. testForHashSet2();
3. }
4.1. /**
2. * 测试保存混合类型的数据.
3. */1. public static void testNormal() {
2. System.out.println("----- testNormal -----------");
3. // Set有多个实现,我们先看看最常用的HashSet1. Set set = new HashSet();
2. // 添加一个字符串1. set.add("字符串");
2. // 添加一个整数对象1. set.add(new Integer(1));
2. // 利用JDK5的特性,增加一个浮点数1. set.add(123.45);
2.1. // 我们看看集合里对象的数量1. System.out.println(set.size());
2.1. // 我们尝试增加一个重复的字符串1. set.add("字符串");
2.1. // 我们再次看看集合里对象的数量1. System.out.println(set.size());
2.1. // 我们来测试看看是否集合里包含了某个数据1. System.out.println(set.contains(123.45));
2.1. // 我们从里面把这个浮点数删除1. set.remove(123.45);
2.1. // 我们再次看看集合里对象的数量1. System.out.println(set.size());
2. }
3.1. /**
2. * 专门针对HashSet的测试。
3. */1. public static void testForHashSet() {
2. System.out.println("----- testForHashSet -----------");
3. HashSet<MyObject> set = new HashSet<MyObject>();
4.1. // 增加一个null对象1. set.add(null);
2. // 我们再次看看集合里对象的数量1. System.out.println(set.size());
2. // 再次增加一个null看看1. set.add(null);
2. // 我们再次看看集合里对象的数量1. System.out.println(set.size());
2.1. MyObject obj = new MyObject("java2000", 2);
2. set.add(obj);
3.1. obj = new MyObject("csdn", 10);
2. set.add(obj);
3.1. // 我们再次看看集合里对象的数量1. System.out.println(set.size());
2.1. // 判断是否包含某个对象1. System.out.println(set.contains(obj));
2.1. obj = new MyObject("java2000_net", 2);
2. set.add(obj);
3.1. // 我们再次看看集合里对象的数量1. System.out.println(set.size());
2.1. // 我们尝试把obj再次放入set看看1. // 并没有增加,因为是重复的1. set.add(obj);
2. System.out.println(set.size());
3.1. // 我们构造一个新的对象,内容和前面的相同1. obj = new MyObject("java2000_net", 2);
2. set.add(obj);
3. System.out.println(set.size());
4.1. // 我们修改一下obj里面的年龄,再看看1. obj.setAge(3);
2.1. // 我们再测试看看是否包含此对象。1. // 请注意,我们这个obj和前面的obj是同一个对象1. // 我们仅仅修改了一下我们的年龄1. System.out.println(set.contains(obj));
2.1. // 我们尝试把obj再次放入set看看1. // 我们又增加了长度1. set.add(obj);
2. System.out.println(set.size());
3. }
4.1. /**
2. * 专门针对HashSet的测试2。
3. */1. public static void testForHashSet2() {
2. System.out.println("----- testForHashSet2 -----------");
3. HashSet<MyObject2> set = new HashSet<MyObject2>();
4. MyObject2 obj = null;
5. for (int i = 0; i < 3; i++) {
6. obj = new MyObject2("java2000" + i, i);
7. set.add(obj);
8. System.out.println(set.size());
9. }
10. }
11.1.}
2.1.class MyObject {
1. private int age;
2. private String name;
3.1. public int getAge() {
2. return age;
3. }
4.1. public void setAge(int age) {
2. this.age = age;
3. }
4.1. public String getName() {
2. return name;
3. }
4.1. public void setName(String name) {
2. this.name = name;
3. }
4.1. MyObject(String name, int age) {
2. this.name = name;
3. this.age = age;
4. }
5.1. public boolean equals(Object obj) {
2. System.out.println("equals");
3. if (obj == null || !(obj instanceof MyObject)) {
4. return false;
5. }
6. MyObject o = (MyObject) obj;
7. return this.age == o.age && this.name.equals(o.name);
8. }
9.1. public int hashCode() {
2. int hashCode = name.hashCode() + String.valueOf(age).hashCode();
3. return hashCode;
4. }
5.}
6.1.class MyObject2 {
1. private int age;
2. private String name;
3.1. public int getAge() {
2. return age;
3. }
4.1. public void setAge(int age) {
2. this.age = age;
3. }
4.1. public String getName() {
2. return name;
3. }
4.1. public void setName(String name) {
2. this.name = name;
3. }
4.1. MyObject2(String name, int age) {
2. this.name = name;
3. this.age = age;
4. }
5.1. public boolean equals(Object obj) {
2. System.out.println("equals");
3. if (obj == null || !(obj instanceof MyObject2)) {
4. return false;
5. }
6. MyObject2 o = (MyObject2) obj;
7. return this.age == o.age && this.name.equals(o.name);
8. }
9.1. public int hashCode() {
2. return 1;
3. }
4.}
5.1.class MyObject3 {
1. private int age;
2. private String name;
3.1. // 采用一个变量进行控制1. // 一旦生成了hashCode,则不再变动1. private int HASHCODE = Integer.MIN_VALUE;
2.1. public int hashCode() {
2. if (HASHCODE == Integer.MIN_VALUE) {
3. // 重新生成本类的hashCode1. HASHCODE = name.hashCode() + String.valueOf(age).hashCode();
2.1. }
2. return HASHCODE;
3. }
4.}
说明,针对HashSet:
•Set不允许重复
•允许 null,重复的null只算一个
•判断是否存在一个数据(是否重复),先判断其hashCode是否存在,若存在再逐个判断hashCode相同的数据是否相等
•判断是否相等,除了hashCode相等外,还要判断对象引用相等(==),或者 equals
•如果一个对象的hashCode变动了,会造成找不到这个对象,也就出现了内存泄漏的危险。
hashCode 方法是HashSet里面对象的关键,它的算法影响到了数据的分散和查找效率。某个确认对象的hashCode不应该变动,避免出现内存泄漏,可以采用如下方法,来方式属性变化造成hashCode变化
1.class MyObject3 {
2. private int age;
3. private String name;
4.1. // 采用一个变量进行控制1. // 一旦生成了hashCode,则不再变动1. private int HASHCODE = Integer.MIN_VALUE;
2.1. public int hashCode() {
2. if (HASHCODE == Integer.MIN_VALUE) {
3. // 重新生成本类的hashCode1. HASHCODE = name.hashCode() + String.valueOf(age).hashCode();
2.1. }
2. return HASHCODE;
3. }
4.}
1.package collection.lession2;
2.1.import java.util.HashSet;
1.import java.util.Set;
1.1./**
1. *认识Set集合之HashSet。<br>
2. * Set用来保存不允许重复的数据。可以是任何对象类型。<br>
3. * JDK5以后,主类型可以通过autobox 放入Set里面。
4. *
7. */1.public class Lession2 {
2.1. public static void main(String[] args) {
2. // 普通测试1. testNormal();
2.1. // 测试HashSet的特殊性1. testForHashSet();
2. testForHashSet2();
3. }
4.1. /**
2. * 测试保存混合类型的数据.
3. */1. public static void testNormal() {
2. System.out.println("----- testNormal -----------");
3. // Set有多个实现,我们先看看最常用的HashSet1. Set set = new HashSet();
2. // 添加一个字符串1. set.add("字符串");
2. // 添加一个整数对象1. set.add(new Integer(1));
2. // 利用JDK5的特性,增加一个浮点数1. set.add(123.45);
2.1. // 我们看看集合里对象的数量1. System.out.println(set.size());
2.1. // 我们尝试增加一个重复的字符串1. set.add("字符串");
2.1. // 我们再次看看集合里对象的数量1. System.out.println(set.size());
2.1. // 我们来测试看看是否集合里包含了某个数据1. System.out.println(set.contains(123.45));
2.1. // 我们从里面把这个浮点数删除1. set.remove(123.45);
2.1. // 我们再次看看集合里对象的数量1. System.out.println(set.size());
2. }
3.1. /**
2. * 专门针对HashSet的测试。
3. */1. public static void testForHashSet() {
2. System.out.println("----- testForHashSet -----------");
3. HashSet<MyObject> set = new HashSet<MyObject>();
4.1. // 增加一个null对象1. set.add(null);
2. // 我们再次看看集合里对象的数量1. System.out.println(set.size());
2. // 再次增加一个null看看1. set.add(null);
2. // 我们再次看看集合里对象的数量1. System.out.println(set.size());
2.1. MyObject obj = new MyObject("java2000", 2);
2. set.add(obj);
3.1. obj = new MyObject("csdn", 10);
2. set.add(obj);
3.1. // 我们再次看看集合里对象的数量1. System.out.println(set.size());
2.1. // 判断是否包含某个对象1. System.out.println(set.contains(obj));
2.1. obj = new MyObject("java2000_net", 2);
2. set.add(obj);
3.1. // 我们再次看看集合里对象的数量1. System.out.println(set.size());
2.1. // 我们尝试把obj再次放入set看看1. // 并没有增加,因为是重复的1. set.add(obj);
2. System.out.println(set.size());
3.1. // 我们构造一个新的对象,内容和前面的相同1. obj = new MyObject("java2000_net", 2);
2. set.add(obj);
3. System.out.println(set.size());
4.1. // 我们修改一下obj里面的年龄,再看看1. obj.setAge(3);
2.1. // 我们再测试看看是否包含此对象。1. // 请注意,我们这个obj和前面的obj是同一个对象1. // 我们仅仅修改了一下我们的年龄1. System.out.println(set.contains(obj));
2.1. // 我们尝试把obj再次放入set看看1. // 我们又增加了长度1. set.add(obj);
2. System.out.println(set.size());
3. }
4.1. /**
2. * 专门针对HashSet的测试2。
3. */1. public static void testForHashSet2() {
2. System.out.println("----- testForHashSet2 -----------");
3. HashSet<MyObject2> set = new HashSet<MyObject2>();
4. MyObject2 obj = null;
5. for (int i = 0; i < 3; i++) {
6. obj = new MyObject2("java2000" + i, i);
7. set.add(obj);
8. System.out.println(set.size());
9. }
10. }
11.1.}
2.1.class MyObject {
1. private int age;
2. private String name;
3.1. public int getAge() {
2. return age;
3. }
4.1. public void setAge(int age) {
2. this.age = age;
3. }
4.1. public String getName() {
2. return name;
3. }
4.1. public void setName(String name) {
2. this.name = name;
3. }
4.1. MyObject(String name, int age) {
2. this.name = name;
3. this.age = age;
4. }
5.1. public boolean equals(Object obj) {
2. System.out.println("equals");
3. if (obj == null || !(obj instanceof MyObject)) {
4. return false;
5. }
6. MyObject o = (MyObject) obj;
7. return this.age == o.age && this.name.equals(o.name);
8. }
9.1. public int hashCode() {
2. int hashCode = name.hashCode() + String.valueOf(age).hashCode();
3. return hashCode;
4. }
5.}
6.1.class MyObject2 {
1. private int age;
2. private String name;
3.1. public int getAge() {
2. return age;
3. }
4.1. public void setAge(int age) {
2. this.age = age;
3. }
4.1. public String getName() {
2. return name;
3. }
4.1. public void setName(String name) {
2. this.name = name;
3. }
4.1. MyObject2(String name, int age) {
2. this.name = name;
3. this.age = age;
4. }
5.1. public boolean equals(Object obj) {
2. System.out.println("equals");
3. if (obj == null || !(obj instanceof MyObject2)) {
4. return false;
5. }
6. MyObject2 o = (MyObject2) obj;
7. return this.age == o.age && this.name.equals(o.name);
8. }
9.1. public int hashCode() {
2. return 1;
3. }
4.}
5.1.class MyObject3 {
1. private int age;
2. private String name;
3.1. // 采用一个变量进行控制1. // 一旦生成了hashCode,则不再变动1. private int HASHCODE = Integer.MIN_VALUE;
2.1. public int hashCode() {
2. if (HASHCODE == Integer.MIN_VALUE) {
3. // 重新生成本类的hashCode1. HASHCODE = name.hashCode() + String.valueOf(age).hashCode();
2.1. }
2. return HASHCODE;
3. }
4.}
说明,针对HashSet:
•Set不允许重复
•允许 null,重复的null只算一个
•判断是否存在一个数据(是否重复),先判断其hashCode是否存在,若存在再逐个判断hashCode相同的数据是否相等
•判断是否相等,除了hashCode相等外,还要判断对象引用相等(==),或者 equals
•如果一个对象的hashCode变动了,会造成找不到这个对象,也就出现了内存泄漏的危险。
hashCode 方法是HashSet里面对象的关键,它的算法影响到了数据的分散和查找效率。某个确认对象的hashCode不应该变动,避免出现内存泄漏,可以采用如下方法,来方式属性变化造成hashCode变化
1.class MyObject3 {
2. private int age;
3. private String name;
4.1. // 采用一个变量进行控制1. // 一旦生成了hashCode,则不再变动1. private int HASHCODE = Integer.MIN_VALUE;
2.1. public int hashCode() {
2. if (HASHCODE == Integer.MIN_VALUE) {
3. // 重新生成本类的hashCode1. HASHCODE = name.hashCode() + String.valueOf(age).hashCode();
2.1. }
2. return HASHCODE;
3. }
4.}
发表评论
-
java实现动态切换上网IP (ADSL拨号上网) java开发
2013-04-24 10:06 1290动态切换IP的实现主是也由Windows的rasdial命令提 ... -
JAVA字符串处理函数
2013-04-12 09:21 1123Java中的字符串也是一连串的字符。但是与许多其他的计算机语 ... -
(转)Lucene打分规则与Similarity模块详解
2013-02-06 14:08 1200搜索排序结果的控制 Lu ... -
Compass将lucene、Spring、Hibernate三者结合
2013-02-01 11:02 1677版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声 ... -
Lucene3.0详解
2013-02-01 10:57 1409★第一部分:概述 1. 我 ... -
Java Web 用户登陆示例代码
2013-02-01 09:56 58107实现功能: 1、用户登陆、注销 2、利用session记 ... -
Java对数函数及Java对数运算
2013-02-01 09:47 6797Java对数函数的计算方法非常有问题,然而在API中却有惊人 ... -
Lucene为不同字段指定不同分词器(转)
2013-01-31 17:34 3456在lucene使用过程中,如 ... -
域名管理与解析原理 — 《Java邮件开发详解》读书笔记
2013-01-31 14:56 1702一 基本概念 1. 域名:域名是由圆点分开一串单词或缩写组 ... -
优秀的Java工程师需要掌握的10项技能
2013-01-31 14:04 1849编程专业相对于计算机领域其他专业来讲,是一门比较难以修炼的专业 ... -
Web开发入门不得不看
2013-01-28 17:31 1033如今,各种互联网的Web ... -
MVC框架的映射和解耦
2013-01-25 21:37 831最近在写一个业务上用到的框架,回想起接触过的一些MVC框架, ... -
JAVA发送EMAIL的例子
2013-07-09 09:44 903import javax.mail.*; ... -
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎
2012-11-19 09:55 1384前两天看到了一个中国新闻网,这个网站的搜索form的actio ... -
Lucene多字段搜索
2012-11-19 09:53 1030最近在学习Lucene的过程中遇到了需要多域搜索并排序的问题, ... -
lucene之sort
2012-11-16 15:06 1089package cn.zqh.lucene.sort; im ... -
Nginx负载均衡
2012-11-16 11:45 7655最近迷上了Nginx,真实麻雀虽小,五脏俱全..功能实在强大. ... -
Lucene相关度排序的调整
2012-11-16 11:38 1729Lucene的搜索结果默认按 ... -
HashSet重复元素判断
2012-10-15 16:37 9139HashSet不能添加重复的元素,当调用add(Object) ... -
java 加密
2012-07-24 14:28 991本篇内容简要介绍BASE64、MD5、SHA、HMAC几种加 ...
相关推荐
在Java中,集合主要分为三大接口:List、Set和Map。这些接口各有特点,适用于不同的应用场景。 一、List接口 List接口是单列集合的子接口,它允许存储重复的元素,并且元素具有顺序性。List接口提供了丰富的操作...
本文将深入探讨Java集合类的汇总,包括List、Set和Map这三大核心接口及其实现类。 首先,让我们从List接口开始。List是一种有序的集合,允许有重复元素,并且支持通过索引来访问元素。ArrayList和LinkedList是List...
2. **集合框架** - **List**:ArrayList、LinkedList的实现原理和应用场景,以及它们在性能上的差异。 - **Set**:HashSet、TreeSet的特性,以及它们对元素的唯一性保证。 - **Map**:HashMap、TreeMap、...
例子2-2 package test; import java.util.HashSet; import java.util.Iterator; //package cn.itcast.p.bean; class Person /*extends Object*/// implements Comparable { private String name; private int...
HashSet 是 Java 中的一个集合类,它实现了 Set 接口并提供了基于哈希表的无序、不重复元素的集合。具体来说,它是通过哈希表(实际上是一个 HashMap 实例)来存储元素的。 以下是 HashSet 的一些主要特点: 无序...
Java 集合类 List-Set-Map 的区别和联系 Java 集合类 List、Set 和 Map 是 Java 语言中最基本的集合类,它们之间存在着紧密的联系和区别。在本文中,我们将对 Java 集合类 List、Set 和 Map 的区别和联系进行详细的...
### 精通Java集合框架——List, Set, Map #### 概述 Java集合框架是一种高度抽象且灵活的数据组织工具,它通过一系列接口来定义不同类型的数据容器,并提供了丰富的操作这些容器的方法。本文将深入探讨Java集合...
Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了数据结构和算法的实现,使得在处理对象集合时更加高效和灵活。...在实际项目中,熟练掌握Java集合框架能极大地提高代码质量和性能。
java HashSet 集合排序,需要通过利用TreeSet集合排序。2013-10-30。
在Java编程语言中,集合类是用于存储一组...在黑马程序员_毕向东_Java基础视频教程中,你可能会更详细地学习到关于HashSet的实现原理和实战技巧。通过观看相关视频和实践操作,可以加深对HashSet的理解,提升编程能力。
Java集合框架是Java编程语言中的一个重要组成部分,它提供了一种高效、灵活地管理对象的方式。在Java中,集合主要分为两大接口:...了解并熟练掌握这些集合的特性和使用场景,对于提高Java编程效率和代码质量至关重要。
Java基础知识学习教程-9集合与泛型 Java集合框架是Java语言中的一种数据结构,用于存储和操作数据。集合框架提供了多种类型的集合,包括Collection、Set、List、Queue、Map等。这些集合类型都继承自Collection接口...
4. **集合框架**:Java集合框架是存储和操作对象的主要工具,包括List、Set、Queue和Map接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。学习这部分内容可以帮助你更高效地组织和管理数据。 5. **IO流...
2. **Set**: `HashSet`、`LinkedHashSet`和`TreeSet`。`HashSet`无序且不保证元素顺序,允许重复;`LinkedHashSet`保持插入顺序;`TreeSet`按照元素自然排序或定制排序,所有元素必须实现`Comparable`接口。 3. **...
Java 2简明教程-第2版是一本深入浅出的Java编程学习资源,适合初学者和有一定经验的开发者。这个教程以电子课件的形式呈现,结合源代码,提供了丰富的学习材料,帮助读者掌握Java语言的核心概念和技术。下面将详细...
Java 集合类详解 Java 集合类是 Java 语言中的一种基本数据结构,用于存储和操作大量数据。集合类可以分为三大类:Collection、List 和 Set。 Collection 是集合框架中的根接口,提供了基本的集合操作,如 add、...
【JAVA2学习资料--第二部分ppt教程】 Java作为全球最流行的编程语言之一,因其跨平台、面向对象的特点,被广泛应用于各种领域,如企业级应用开发、移动应用(Android)、大数据处理等。本教程主要针对Java2阶段的...
Java 集合类可以分为 Set、List 和 Map 三种体系,分别用于存储无序、不可重复的集合、有序、可重复的集合和具有映射关系的集合。 Collection 接口是 Java 集合框架的核心接口,定义了基本的集合操作方法,如 add...
Java集合框架包括List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)、Map(如HashMap和TreeMap)等接口及其实现类,提供了存储和操作对象的高效方式。 7. **IO流** Java的IO流系统允许读写文件、网络...