`
JaHunter
  • 浏览: 91986 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

set相关

    博客分类:
  • java
阅读更多
ArrayList 允许快速随机存取,相比于LinkedList不适合拿来进行元素安插和移除操作。
LinkedList 提供最佳循序存取,适合安插和移除元素,随机存取操作比ArrayList缓慢。
HashSet 只存放唯一值,是把搜寻时间看得很重要,用hash方式作set,故Access time complexity = O(1)
TreeSet 同上,但是存入的元素都会经过排序,所以速度比HashSet慢一点
LinkedHashSet 此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代。
 
Set 无序的,不可以重复元素 
 |--HashSet: 底层数据结构是哈希表, 线程不同步 
         hashSet是如何保证元素唯一性呢? 
          是通过元素的两个方法, hashCode 和  equals 来完成的  
          如果元素的hashCode值相同,才会判断equals 是否为true 
          如果元素的hashCode值不同,不会调用 equals. 
           
          注意: 对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCode和equals方法. 
             
 |--TreeSet: 可以对Set集合中的元素进行排序 
             底层数据结构式是二叉树 
             compareTo 方法 return 0  TreeSet 中就只会有一个 元素 
 
如果我们自己定义的一个类的对象要加入到TreeSet当中,那么这个类必须要实现Comparable接口。
 
/**
 * testTreeSet1自然排序 testTreeSet2自定义排序
*/
public class TreeSetTest {
 
       public static void main(String[] args) {
            TreeSetTest tst = new TreeSetTest();
            tst.testTreeSet1();
            tst.testTreeSet2();
      }
      
       public void testTreeSet1() {
             Set set1 = new TreeSet();
             set1.add( new BigDecimal( "3")) ;
             set1.add( new BigDecimal( "5")) ;
             set1.add( new BigDecimal( "1")) ;
             set1.add( new BigDecimal( "9")) ;
            
             //会报错java. lang.String cannot be cast to java.math.BigDecimal
             //set1.add("1");
            
            for (Iterator it = set1.iterator(); it.hasNext();) {
                  System. out .println(it.next());
            }
             //output:1  3  5  9
      }
      
       public void testTreeSet2() {
             Set set1 = new TreeSet();
             set1.add( new Customer( "Tom", 20)) ;
             set1.add( new Customer( "Petter" , 22));
             set1.add( new Customer( "Mike" , 19));
             set1.add( new Customer( "Tom", 21)) ;
 
             for (Iterator it = set1.iterator(); it.hasNext();) {
                  System. out .println(it.next());
            }
             //output:
             //Mike 19
             //Petter 22
             //Tom 20
             //Tom 21
      }
 
      //注:要实现equals,hashCode方法
       class Customer implements Comparable{
             public String name ;
             public int age ;
             public Customer(String name, int age) {
                   this .name = name;
                   this .age = age;
            }
             @Override
             public String toString() {
                   return this .name " " + this .age ;
            }
            
             @Override
             public boolean equals(Object obj) {
                   if (this == obj) return true ;
                   if (!(obj instanceof Customer)) return false ;
                  Customer other = (Customer)obj;
                   if (this .name .equals(other. name) && this .age == other.age ) {
                         return true ;
                  } else {
                         return false ;
                  }
            }
            
             @Override
             public int hashCode() {
                  
                  int result;
                  result = ( name == null ? 0 : name.hashCode());
                  result = 29 * result + age ;
                  return result;
            }
            
             @Override
             public int compareTo(Object o) {
 
                  Customer other = (Customer)o;
                   //先按name属性排序(如果想按倒序排序,则将下面依次改成返回-1/1)
                   if (this .name .compareTo(other. name) > 0) return 1;
                   if (this .name .compareTo(other. name) < 0) return -1;
                  
                   //再按age属性排序
                   if (this .age > other. agereturn 1;
                   if (this .age < other. agereturn -1;
                  
                   return 0;
            }
      }
}
分享到:
评论

相关推荐

    new style TabSet

    标签 "TabSet delphi" 明确指出这是 Delphi 平台下的 TabSet 相关知识。Delphi 是一种基于 Object Pascal 的集成开发环境(IDE),它拥有强大的组件化开发能力,允许开发者通过拖放组件来构建用户界面。在 Delphi 中...

    set容器对类进行排序

    本文将详细讲解如何利用`set`容器对类进行排序,并探讨相关的关键知识点。 首先,`set`容器内部基于红黑树(Red-Black Tree)数据结构,保证了插入、删除和查找操作的时间复杂度为O(log n)。这意味着即使在大量元素...

    vc++ 中SetProperty()的使用解答

    查阅相关类的文档,或者使用IDE的代码提示和调试工具,可以帮助你更好地理解和使用`SetProperty()`。 总之,`SetProperty()`在VC++的MFC编程中是一个关键的成员函数,用于设置对象的属性值。理解和熟练使用`Set...

    C++_STL之set容器使用方法

    `set`容器提供了多个与容量相关的函数: - **empty()**:判断容器是否为空。 - **size()**:返回容器当前包含的元素数量。 - **max_size()**:返回容器所能容纳的最大元素数量。 - **resize(n[, val])**:将容器的...

    level set 的工具箱

    Level Set工具箱是专门用于实现这些算法的软件包,为用户提供了一套完整的工具来处理与level set相关的计算。 Level Set方法的核心概念在于,它将曲线或曲面作为零水平集来表示,即函数φ(x, y, z) = 0的点集。这种...

    code of Levelset

    总的来说,Levelset方法是一种强大的工具,它在处理与界面演化相关的各种问题时展现出极大的灵活性和准确性。结合现代的深度学习技术,Levelset方法可以进一步扩展其应用范围,解决更复杂的实际问题。

    C++set函数学习

    下面详细解释set和multiset的区别、特性、使用方法以及相关操作。 首先,set的特点是保持元素的唯一性,这意味着在set中不会有重复的元素。当你向set中插入一个元素时,如果该元素已存在,则插入操作会忽略该元素,...

    string_vector_set_算法相关总结.docx

    string_vector_set_算法相关总结 本文总结了 string、vector、set 等数据结构的使用和算法相关知识点,涵盖了字符串的转换、替换、查找、距离计算、树的遍历、链表的操作、除法运算的优化、vector 的使用、...

    SetMain-中文的

    【标题】"SetMain-中文的" 暗示了我们正在讨论的可能是一个与程序启动和主函数有关的主题,特别是在编程中。在大多数高级编程语言中,`main` 函数是程序执行的起点,而`SetMain`可能是对这个概念的一种自定义或扩展...

    set的用法的源代码资源

    接下来,我们将深入学习`set`的相关知识。 1. **创建Set** 创建一个空集合可以使用`set()`函数,如`my_set = set()`。如果要初始化一个包含特定元素的集合,可以直接传入可迭代对象,例如:`my_set = set([1, 2, 3...

    RSET8139网卡驱动

    2. **HELP.EXE**:这是一个帮助文件,通常包含有关驱动程序的使用说明、常见问题解答和故障排除等信息,用户在遇到问题时可以查阅此文件获取帮助。 3. **FILEPATH.LST**:这个文件可能记录了驱动程序安装所需的文件...

    Easy Set Package-LG显示器的设置软件

    10. **技术支持与文档**:除了软件本身的功能,LG Easy Set Package可能还会提供相关的技术支持和使用指南,帮助用户更好地理解和利用其显示器的所有功能。 总的来说,LG Easy Set Package是LG显示器用户不可或缺的...

    character_set_client character_set_connection character_set_results

    标题中的"character_set_client character_set_connection character_set_results"这三个术语是MySQL数据库中关于字符集设置的关键概念。...通过深入研究源码和使用相关工具,可以更好地理解和优化数据库的字符集配置。

    Oracle性能分析——使用set_autotrace_on和set_timing_on来分析select语句的性能.doc

    ,这将显示相关的查询计划和统计信息。 set autotrace on 命令的结果包括执行计划、统计信息和trace 信息。执行计划展示了 SQL 语句的执行步骤,例如索引的使用、表扫描的方式等;统计信息展示了 SQL 语句的执行...

    java 运用集的相关类(Set)

    本篇将深入探讨Java中Set接口及其相关的实现类,以及如何在实际编程中运用。 Set接口继承自Collection接口,其主要特性是元素的唯一性,即不允许有重复的元素。Set接口没有定义任何特定的存储行为,具体的行为由它...

    SQL_SET.rar_SetSQL_sql_sql set _sql set connectattr_sql set rouc

    "SQL_SET.rar_SetSQL_sql_sql set _sql set connectattr_sql set rouc"这个标题可能是在暗示一系列关于SQL中的"SET"关键字的教程或者文档集合,包括设置SQL语句、连接属性以及可能涉及到的行计数相关设置。...

    stl_set容器详细使用方法

    STL Set 容器详细使用方法 STL(Standard Template Library)中的 Set 容器是一种关联容器,用于存储唯一的元素,且自动排序。下面是 STL Set 容器的详细使用方法。 元素类型 Set 容器中元素的类型可以是任何类型...

    JAVA IntSet 数列集合

    在压缩包文件`intSet`中,可能包含了实现`IntSet`接口的自定义类,源代码或者其他相关测试文件。为了进一步了解这个特定的`IntSet`实现,你需要查看源代码,研究其方法的实现细节以及可能的扩展功能。

    Set 语句用法详解

    这意味着变量不再引用任何对象,且如果该对象没有其他引用,系统会释放与其相关的所有资源。 ### 功能与特性 1. **类型一致性**:`Set`语句要求`objectvar`必须与`objectexpression`指向的对象类型一致,否则会...

Global site tag (gtag.js) - Google Analytics