`
baobeituping
  • 浏览: 1068489 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

集合类的相关知识

阅读更多

SET集合类似一个罐子,一旦把对象丢进SET集合,集合里多个对象之间没有明显的顺序。SET集合里面不允许包含相同的元素,如果试图把两个相同元素加入到一个SET中,则添加操作失败,ADD方法返回FALSE,且新元素不会被加入。

      SET集合判断两个对象是不是相同是根据EQUALS方法,也就是说两个对象的EQUALS方法比较返回TRUE,SET集合是不会接受这两个对象。

例如:

public static void main(String[] args) {
   Set books = new HashSet();
   books.add(new String("Struts2"));
   boolean result = books.add(new String("Struts2"));
   System.out.println(result);
   System.out.println(books);

 }

结果:

false
[Struts2]

 

HashSet特点:

1.不能保证元素的排列顺序,顺序可能变化。

2.HASHSET不是同步的,如果多个线程同时访问,要用代码来保证同步。

3.集合元素可以为NULL。

 

HASHSET和SET接口有不同的是,他判断两个元素相等的标准时两个对象通过EQUALS方法比较相等,并且两个对象的hashcode方法返回值也相等。

 

public class A {

 public boolean equals(Object obj)
 {
  return true;
 }
}

 

package com.action;

public class B {

 public int hashCode()
 {
  return 1;
 }
}

 

public class C {

 public boolean equals(Object obj)
 {
  return true;
 }
 
 public int hashCode()
 {
  return 2;
 }
}

 

public static void main(String[] args) {
   Set books = new HashSet();
   books.add(new A());
   books.add(new A());
   
   books.add(new B());
   books.add(new B());
   
   books.add(new C());
   books.add(new C());
   System.out.println(books);
 }

结果:

[com.action.C@2, com.action.A@d9f9c3, com.action.B@1, com.action.B@1, com.action.A@757aef]

 

可以看到,向集合中分别添加了2个A,2个B,2个C,其中C重写equals方法,并且返回TRUE,HAHSCODE方法总是返回2,导致HASHSET将会把2个C对象当成一个对象。而A和B只满足了HASHSET判断对象相同条件的一种,所以如果需要把一个对象放入HASHSET中,如果重写该对象的EQUALS方法,也必须重写该类的HASHCODE方法,规则是2个对象通过EQUALS方法比较返回TRUE,这两个对象的HASHCODE也应该相同。

 

当向HASHSET中添加可变对象时,必须十分小心,如果修改HASHSET集合中的对象,有可能导致对象与集合中的其他对象相等,从而导致HASHSET无法准确访问对象。

 

LINKEDHASHSET是HASHSET集合的子类,但是他需要维护元素的插入顺序,性能略低于HASHSET的性能,但在迭代访问SET元素时,性能比较好。

 

TreeSet是SortedSet接口的惟一实现,可以确保集合元素处于排序状态。

 

 

TreeSet,不是根据元素的插入顺序进行排序,而是根据元素的实际值来进行排序的。TreeSet采用红黑树数据结构对元素进行排序,支持两种排序方式,自然排序,和定制排序。默认情况次采用自然排序。(调用集合元素的compareTo方法来比较两个元素的大小,然后按照集合元素升序排列)

试图把一个对象添加进TREESET中,该对象必须实现Comparable接口,否则会抛出异常。因为TreeSet会调用他集合中的compareTo方法与集合中的其他元素进行比较。

判断加入到其中的对象相等的原则:两个对象通过equals比较返回false,通过compareTo比较返回0.

例如:

package com.action;

public class A implements Comparable{

 public boolean equals(Object obj)
 {
  return true;
 }

 public int compareTo(Object obj) {
  // TODO Auto-generated method stub
  return 1;
 }
}

 

public static void main(String[] args) {
   Set books = new TreeSet();
   books.add(new A());
   books.add(new A());
   System.out.println(books);
 }

 

打印结果:[com.action.A@757aef, com.action.A@d9f9c3]

 

因为Aequals返回true,compareTo返回1,不满足是同一对象条件,所以保存的是两个对象。

 

注释:在HashSet和TreeSet集合中只放入不可变对象。如果放入可变对象,当可变对象的属性被修改的时候,容易出错。

 

 List判断两个对象相等只要通过equals方法比较返回TRUE即可。

 

分享到:
评论

相关推荐

    我自己概括的集合类相关知识形成的一个组织结构图

    这是我手写的集合类的xmind思维导图,查看请确保自己本地有安装Xmind,因为无法在博客内上传,只能后台上传.请结合我发布的文章(java随笔(集合(一)))查看.

    java集合类的代码

    下面我们将深入探讨Java集合类的一些关键知识点: 1. **ArrayList和LinkedList**: - `ArrayList`:基于动态数组实现的集合,适合频繁的随机访问,但插入和删除元素时效率较低,因为需要移动大量元素。 - `...

    java集合类知识总结--思维导图文件xmind

    java集合类知识总结--思维导图文件xmind xmind文件类型 总结了java常用集合相关问题 包括map、set、list、数组等

    java集合类的相关资料

    本资料包含“集合类.doc”和“java_集合.pdf”,旨在深入探讨Java集合类的相关知识。 首先,Java集合框架的核心接口包括List、Set、Queue和Map。这些接口定义了各种集合的行为,而具体的实现类则提供了实际的数据...

    Cpp集合类.rar

    在C++编程中,集合类是STL(标准模板库)的一部分,用于高效地管理和操作数据集合。在微软的MFC(Microsoft Foundation Classes)库中,也提供了集合类的实现,便于开发者处理对象的集合。"Cpp集合类.rar"这个压缩包...

    2JAVA编程高级-集合类.pdf

    ### JAVA编程高级——集合类知识点详解 #### 一、Java中的集合类概述 在Java编程中,集合类是一个非常重要的概念,它主要用于存储和管理对象的集合。与数组相比,集合提供了更多的灵活性,例如动态调整大小的能力...

    自己整理的IO流,网络编程,集合类的一些笔记

    ### 知识点一:网络编程基础 #### 1. IP地址 - **定义**:IP地址(Internet Protocol Address)是互联网协议地址的简称,它为互联网上的每一...希望这些信息能够帮助您更好地理解和掌握网络编程和集合类的基础知识。

    java知识集合

    根据提供的文件内容,我们可以整理出以下Java相关知识点: JVM(Java虚拟机): JVM是运行Java字节码的虚拟计算机。它负责执行字节码,提供跨平台的兼容性,是Java能够"一次编译,到处运行"的关键所在。 内存区域:...

    Week17_第9讲_泛型与集合类.pdf

    ### 泛型与集合类知识点总结 #### 一、泛型简介 - **定义**:泛型是Java SE 5.0引入的新特性,它允许程序员在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。 - **作用**: - ...

    集合类泛型类

    本文将深入探讨Java集合类泛型的相关知识点,帮助你更好地掌握这个核心概念。 首先,让我们从基础开始。Java集合框架是Java API的一个重要组成部分,它提供了一组接口和实现这些接口的类,用于存储和操作对象的集合...

    大公司最喜欢问的Java集合类面试题

    ### Java集合类重要知识点 #### 一、概述 在Java编程中,集合类是一个非常重要的概念,主要用于存储和管理对象的集合。Java集合框架主要包括两大类:`Collection`和`Map`。本篇文章将着重介绍`Collection`部分,并...

    C#中的数组与集合类,vusual studio 2008教程

    ### C#中的数组与集合类详解 #### 一、数组的概念与使用 在C#编程中,数组是一种非常重要的数据结构,它允许程序员以一种高效且有序的方式存储多个相同类型的数据项。数组不仅可以帮助简化代码,提高代码的可读性...

    java集合类学习笔记.doc

    ### Java集合类学习笔记知识点详解 #### 一、集合框架概述 ##### 1.1.1 容器简介 在Java编程中,容器是用于存储和管理对象集合的重要工具。当我们处理大量的对象时,比如存储多个员工的信息,仅仅依赖于基本的...

    徐葳《40小时掌握java语言之07集合》内部教材

    在Java编程语言中,集合类是一组...以上是基于教材《40小时掌握java语言之07集合》中的部分内容对Java集合类相关知识点的详细解读。掌握这些知识点对于学习Java编程及在实际工作中使用Java进行项目开发都是至关重要的。

    集合类的菜单界面

    下面将详细讨论相关知识点。 一、集合类的概念 集合类在计算机科学中是一种抽象数据类型,它代表了一个无序的不重复元素序列。C++标准库提供了一种模板类`std::set`,它是红黑树的实现,但这里我们使用数组来模拟...

    Java集合类知识点总结

    Java集合类知识点总结 Java集合类是Java语言中最基本的数据结构之一,用于存储和操作对象的集合。下面是Java集合类的相关知识点总结: 集合的定义 集合是只能存储对象的数据结构,对象类型可以不一样,长度可变。...

    大公司最喜欢问的Java集合类面试题.zip

    了解并熟练掌握这些知识点对于在Java集合类相关的面试中脱颖而出至关重要。理解它们的内部工作原理、性能特性以及在不同场景下的适用性,可以帮助开发者编写出更高效、更安全的代码。在准备面试时,不仅要记住这些...

    大公司最喜欢问的Java集合类面试题.docx

    大公司通常会在面试中询问关于Java集合类的问题,以检查候选人的编程能力和知识广度。 Collection接口是Java集合类的基础接口,代表了一组Object,或者说是一组元素。Collection接口有两个标准的构造函数:无参数的...

    java集合类的讲解文件

    Java集合类是Java编程语言中处理对象集合的重要工具,它为开发者提供了丰富的数据结构和算法支持。这份讲解文件主要涵盖了Java集合框架的核心概念,包括接口和实现类。 首先,集合框架是一个类库的集合,其核心是...

Global site tag (gtag.js) - Google Analytics