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 集合框架_中的更多相关文章

  1. 浅入深出之Java集合框架(中)

    Java中的集合框架(中) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到<浅入深出之Java集合框架 ...

  2. Java 集合框架_上

    集合框架被设计成要满足以下几个目标. 该框架必须是高性能的.基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的. 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性. 对一个集合的 ...

  3. Java 集合框架_下

    Map接口 特点: [1]Map接口称为键值对集合或者映射集合,其中的元素(entry)是以键值对(key-value)的形式存在. [2]Map 容器接口中提供了增.删.改.查的方式对集合进行操作. ...

  4. 浅入深出之Java集合框架(上)

    Java中的集合框架(上) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到<浅入深出之Java集合框架 ...

  5. 浅入深出之Java集合框架(下)

    Java中的集合框架(下) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,哈哈这篇其实也还是基础,惊不惊喜意不意外 ̄▽ ̄ 写文真的好累,懒得写了.. ...

  6. Java集合框架之Set接口浅析

    Java集合框架之Set接口浅析 一.java.util.Set接口综述: 这里只对Set接口做一简单综述,其具体实现类的分析,朋友们可关注我后续的博文 1.1Set接口简介 java.util.se ...

  7. Java集合框架中Map接口的使用

    在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...

  8. Java集合框架中List接口的简单使用

    Java集合框架可以简单的理解为一种放置对象的容器,和数学中的集合概念类似,Java中的集合可以存放一系列对象的引用,也可以看做是数组的提升,Java集合类是一种工具类,只有相同类型的对象引用才可以放 ...

  9. 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法

    注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...

随机推荐

  1. ]Linq to EF 增删改查

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  2. memcached 扩展安装(windows)

    在脚本之家里下载扩展压缩包 https://www.jb51.net/softs/392873.html 安装扩展前得先安装memcached并启动 下载完扩展压缩包解压并找到对应自己php版本 复制 ...

  3. Unity3d导入3dmax后model 的缩放为0.0254的原因以及解决办法

    http://blog.csdn.net/pdw_jsp/article/details/51259493 这个问题其实已经早都出现过了,今天我们这边也碰到了,这里做个记录吧 导致的问题~ 场景的比例 ...

  4. ue4 修改3dui内容

    修改text内容1 修改text内容2 上面的方法是对外公开某个控件,然后再蓝图中直接改控件内容 另一种更好的方法时,在控件上新建public变量,控件绑定到这个变量上,由蓝图直接改变这个public ...

  5. 洛谷P1228 地毯填补问题

    P1228 地毯填补问题 题目描述 相传在一个古老的阿拉伯国家里,有一座宫殿.宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将除公主站 ...

  6. 记录错误:tomcat“socket close”错误

    Error running 'Tomcat 8.5.37': Unable to open debugger port (127.0.0.1:9562) 使用打开cmd.exe 输入 1)taskli ...

  7. Nacos深入浅出(三)

    EventDispatcher.fireEvent(new ConfigDataChangeEvent(true, dataId, group, tenant, time.getTime())); 跟 ...

  8. JS高级学习历程-14

    昨天内容回顾 1. 面向对象的私有成员.静态成员 私有成员:在构造函数里边定义局部变量,就是私有成员. 静态成员:在js里边,函数就是对象,可以通过给函数对象声明成员方式声明静态成员. 2. 原型继承 ...

  9. shell编程 Shell script 的默认变量($0, $1...)

    Shell script 的默认变量($0, $1...) 我们知道指令可以带有选项与参数,例如 ls -la 可以察看包含隐藏文件的所有属性与权限.那么 shell script 能不能在脚本文件名 ...

  10. C# File和fileinfo类

    两个类功能差不多,File是静态方法实现的,Fileinfo通过实例方法实现的: 文件操作例子: using System; using System.Collections.Generic; usi ...