• Java 集合框架_中


    Set接口

        特点:

          【1】Set接口表示一个唯一、无序的容器(和添加顺序无关)  

       Set接口常用实现类有

        HashSet

            【1】HashSet是Set接口的实现类,底层数据结构是哈希表

            【2】HashSet是线程不安全的(不保证同步)

            

            【3】根据哈希表的工作原理,请存储一个自定义对象到HashSet中。一定要实现hashCode方法和equals方法

                 【4】优点:添加、删除、查询效率高;缺点:无序

              LinkedHashSet

            【1】LinkedHashSet是Set接口的实现类,底层数据结构哈希表+链表哈。希表用于散列元素;链表用于维持添加顺序

            【2】如果要添加自定义对象元素,也需要重写hashCode和equals方法。 

        TreeSet

            【1】TreeSet 是Set接口的实现类,底层数据结构是二叉树

            【2】TreeSet 存储的数据按照一定的规则存储。存储规则让数据表现出自然顺序。

            【3】输出时按照一定的规则:左子树->根节点->右子树

              特殊:【4】比较策略分两种:内部比较器外部比较器 

              内部比较器  

              (1)当一个自定义对象实现Comparable并实现compareTo方法时,通过指定具体的比较策略,此时称为内部比较器。

              (2)比较策略一般当前对象写在前面,待比较对象也在后面,比较结果默认升序

                      return  this.getAge() - o.getAge() ;  如果想要降序,改变两个比较对象的位置即可

                (3)也可以多种比较因素

              @Override
             public int compareTo(Student o) {
               /*if(this.getAge()<o.getAge()) {
                  return -1;
              }else if(this.getAge() == o.getAge()) {
                  return 0;
              }else {
                  return 1;
              }*/
            
              // return  this.getAge() - o.getAge() ;
            
              if(this.getAge()<o.getAge()) {
                  return -1;
              }else if(this.getAge() == o.getAge()) {
                  return this.getName().compareTo(o.getName());
              }else {
                  return 1;
              }
          }

              外部比较器

              (1)当实际开发过程中不知道添加元素的源代码、无权修改别人的代码,此时可以使用外部比较器。

              (2)Comparator 位于java.util包中,定义了compare(o1,o2) 用于提供外部比较策略。TreeSet接受一个指定比较策略的构造方法,这些比较策略的实现类必须实现Comparator

              (3)使用匿名内部类优化

        public class Test02 {
            public static void main(String[] args) {
            
                TreeSet<String> set2 = new TreeSet<String>(new Comparator<String>() {
    
                  @Override
                  public int compare(String o1, String o2) {
                      return o1.length() - o2.length();
                  }
                  
              });
            
              set2.add("banana");
              set2.add("coco");
              set2.add("apple");
            
              set2.add("apple");
              System.out.println(set2);
            
          }
      }

        

  • 相关阅读:
    java域名解析
    JDK8新特性面试
    java设计模式--单例模式
    EclipseEE导入项目出现的那些问题
    Eclipse配置Git发布项目到Github
    SVN本地服务器的搭建
    APK的反编译
    Oracle系列--级联删除和级联更新
    Oracle创建表空间和用户
    全方面了解和学习PHP框架 PHP培训教程
  • 原文地址:https://www.cnblogs.com/dedema/p/10821517.html
Copyright © 2020-2023  润新知