比较器

java集合框架

喜夏-厌秋 提交于 2020-01-18 02:00:38
在此之前的Java2, Java 提供特设课程,如字典,向量,堆栈和属性(Dictionary, Vector, Stack,Properties)来存储和处理的对象组。虽然这些类是非常有用的,他们缺乏一个中心,统一的主题。因此,所使用的矢量的方式是从使用属性的方式不同。 集合框架的目的是要满足几个目标。 框架必须是高性能的。在实现了基本的集合(动态数组,链表,树,哈希表)是高效的。 框架具有允许不同类型的集合以类似的方式和高度的互操作性。 扩展和/或适应的集合必须是容易的。 为此,整个集合框架是围绕一组标准的接口设计。提供了几种标准的实现,例如LinkedList,HashSet和TreeSet,这些接口,可以按原样使用,也可以实现自己的集合。 一个集合框架是一个统一的体系结构来表示和操作集合。所有集合框架包含以下内容: 接口: 这些都是表示集合的抽象数据类型。接口允许其代表性细节的集合可以独立操作。在面向对象的语言,接口一般形成了一个等级。 实现,即类: 这些都是集合接口的具体实现。在本质上,它们是可重复使用的数据结构。 算法: 这些是执行有用的计算的方法,例如搜索和排序,在该实施集合接口的对象。说是多态的算法:也就是说,同样的方法可以在许多不同的适当的集合接口的实现中使用。 除了集合该框架定义了几个映射的接口和类。映射存储键/值对。虽然映射是不是在正确使用的术语集合

HashMap的存储原因与比较器

∥☆過路亽.° 提交于 2020-01-16 01:06:39
一: 1.存储键值对的数据 key value->在哈希表结构中 2.key获取hashcode()值一个int的整数,根据hash算法进行计算,算出桶的位置 hash算法: hashcode()值 % 数组的长度 hashcode()值 & 数组的长度-1 ---->数组的长度必须为2的整数幂 3.先判断对应桶中是否已经存在数据,有,判断桶中的数据是否与我当前的key相等,使用equals(),如果相等value覆盖,如果不相等,把数据放入链表的最后 对应桶中是否已经存在数据,没有,那就直接放入桶中 如果equals相等,hashcode一定要保证相等,保证相等的数据桶的位置一样,才会比较equals进行去重 hashcode相等,equals不一定相等,所以我才要放入桶的时候比较equals() 总结: 如果使用hashMap存储数据,key是自定义的引用的数据类型,一定要重写hashcode()和equals()方法 java8:哈希表(数组+链表+红黑树):当桶中的数据超过8个,把结构当前链表结构变为红黑树 初始容量:16 加载因子:0.75 当16*0.75达到临界点12进行扩容 扩容: 扩容位桶的大小 二: Arrays 操作数组的工具类 此类包含用来操作数组(比如排序和搜索)的各种方法 Collections 操作容器的工具类 HashMap 线程不安全,效率较高

555

删除回忆录丶 提交于 2020-01-10 15:24:15
NE555引脚图与内部功能结构 时间: 2017-12-07 关键字: NE555 NE555引脚图 555定时器 555定时器是电子工程领域中广泛使用的一种中规模集成电路,它将模拟与逻辑功能巧妙地组合在一起,具有结构简单、使用电压范围宽、工作速度快、定时精度高、驱动能力强等优点。555定时器配以外部元件,可以构成多种实际应用电路。广泛应用于产生多种波形的脉冲振荡器、检测电路、自动控制电路、家用电器以及通信产品等电子设备中。 详解555引脚作用 555定时器又称时基电路。555定时器按照内部元件分有双极型(又称TTL型)和单极型两种。双极型内部采用的是晶体管;单极型内部采用的则是场效应管,常见的555时基集成电路为塑料双列直插式封装,正面印有555字样,左下角为脚①,管脚号按逆时针方向排列。 555 定时器的功能主要由两个比较器决定。两个比较器的输出电压控制RS 触发器和放电管的状态。在电源与地之间加上电压,当 5 脚悬空时,则电压比较器 C1 的同相输入端的电压为 2VCC /3,C2 的反相输入端的电压为VCC /3。若触发输入端 TR 的电压小于VCC /3,则比较器 C2 的输出为 0,可使 RS 触发器置 1,使输出端 OUT=1。如果阈值输入端 TH 的电压大于 2VCC/3,同时 TR 端的电压大于VCC /3,则 C1 的输出为 0,C2 的输出为 1,可将 RS

java之map的基本介绍

若如初见. 提交于 2020-01-05 04:45:58
map简介 在讲解Map排序之前,我们先来稍微了解下map。map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍): HashMap 我们最常用的Map,它根据key的HashCode 值来存储数据,根据key可以直接获取它的Value,同时它具有很快的访问速度。HashMap最多只允许一条记录的key值为Null(多条会覆盖);允许多条记录的Value为 Null。非同步的。 TreeMap 能够把它保存的记录根据key排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。 Hashtable 与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。 LinkedHashMap 保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空,非同步的 map的排序 TreeMap的排序 TreeMap默认是升序的

java容器

試著忘記壹切 提交于 2020-01-05 02:31:01
Collection容器 所有容器的父接口 容器可以存储任意类型的数据 内部存储的是地址 容器只能存储引用数据类型的数据(数据需要通过自动装箱实现) Collection的子接口包括List接口和set接口 格式 Collection 引用= new 子容器() 方法 迭代 iterator() 获取迭代器 增 add(Object) 增加指定元素 addAll(Collection) 将子容器的内容全部加入 删 remove(Object) 移除指定元素,只移除存储位置最前的一个 removeAll(Collection) 将子容器的内容移除 clear() 清空容器 retain(Collection) 获取交集return交集的容器 查 contain(Object) 查找单个元素 containAll(Collection) 查找子容器 size() 查找长度 判断 isEmpty() 判断是否为空 equals(Collection) 比较 转换 toArray() 转换为数组 遍历 增强for|for…each For(元素类型 引用: 容器){操作 } 迭代器 范型 在定义容器和迭代器时添加<>类型标签 Collectin<范型> 引用=new 子容器<范型>() Iterator<范型> 引用=容器.iterator() 迭代器 Iterator迭代器接口 定义获取

Java 集合框架_中

▼魔方 西西 提交于 2019-12-29 14:48:14
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】 比较策略分两种: 内部比较器 和 外部比较器          内部比较器         

Java比较器

不想你离开。 提交于 2019-12-26 01:20:42
为什么要使用Java比较器 在平时的情况下,对象之间一般只存在 == 或者 ! = 关系,无法比较二个对象之间的大小。当如果在实际开发中,需要比较对象之间的某一个属性之间的大小,那么我们就可以使用到Java中的比较器。 Java中二种比较器 自然排序 :Comparable 定制排序 :Comparator 自然排序 :Comparable的使用 对象实现Comparable接口,并重写compareTo 方法 重写compareTo 的规则 如果当前对象this大子形参对象obj,则返回正整数, 如果当前对象this小于形参对象obj,则返回负整数, 如果当前对象this等于形参对象obi,则返回零。. 举例 : 比如有一个商品类,商品类中存在二个属性,name 和 price,其中在多件商品中需要根据该商品的price进行从小到大的顺序进行排序 商品类 public class Goods implements Comparable { private String name; private int price; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPrice() { return price;

Comparable接口与Comparator接口

你说的曾经没有我的故事 提交于 2019-12-20 00:28:44
【Comparable和Comparator源码】 java.lang.Comparable public interface Comparable<T> { public int comparaTo(T o); } ------------------------------------------------------------------ java.util.Comparator public interface Comparator<T> { int compare(T o1,T o2); boolean equals(Object obj); } 【Comparable接口】 1. 若一个类实现了Comparable接口,就意味着该类支持排序。假设存在实现了 Comparable接口的类的对象的List列表(或数组),则该List列表(或数组)可以通过Collections.sort(或Arrays.sort)进行排序。 2. 一个类实现了comparable接口表明这个类的对象之间是可以互相比较的。如果用数学语言描述的话就是这个类的对象组成的集合中存在一个全序。这样,这个类对象组成的集合就可以使用 Sort 方法排序了。 【Comparator接口】 1. 我们需要控制某个类的次序,而该类不支持排序(即没有实现Comparable接口)。那么

TreeMap

耗尽温柔 提交于 2019-12-16 00:48:07
TreeMap 是一个有序的key-value集合,它是通过红黑树实现的。 TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合。 TreeMap 实现了NavigableMap接口,意味着它支持一系列的导航方法。比如返回有序的key集合。 TreeMap 实现了Cloneable接口,意味着它能被克隆。 TreeMap 实现了java.io.Serializable接口,意味着它支持序列化。 TreeMap基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。 TreeMap的基本操作 containsKey、get、put 和 remove 的时间复杂度是 log(n) 。 另外,TreeMap是非同步的。 它的iterator 方法返回的迭代器是fail-fastl的。 TreeMap构造函数 1234567891011 // 默认构造函数。使用该构造函数,TreeMap中的元素按照自然排序进行排列。TreeMap()// 创建的TreeMap包含MapTreeMap(Map<? extends K, ? extends V> copyFrom)// 指定Tree的比较器TreeMap(Comparator<? super

Java-马士兵设计模式学习笔记-策略模式-模拟 Comparator接口

元气小坏坏 提交于 2019-12-08 04:35:14
续上一篇 《Java 模拟 Comparable接口》 一、Teacher类及Student类的比较大小方式是不固定的,比如老师除了比较职称外,还可比较工龄大小,年龄大小等。则定义Comparator接口,不同比较方法去定义为一个xxComparator类,去实现Comparator接口,Teacher类及Student类引用具体的xxComparator比较器,则可实现灵活的比较方式切换。此则为策略模式的一个例子:当我要比较大小的时候,先定义一个比较器Comparator,但具体的比较由具体的比较策略去实现,如TeacherAgeComparator PS: 解决的问题一涉及要求灵活多变,可扩展等进,则应重点考虑使用多态思想。 二、有如下几个类: 1.DataSorter.java 2.Studnet.java 3.Teacher.java 4.Comparable.java 5.Comparator.java 6.TeacherAgeComparator.java 7.StudentMarkComparaotr.java 1.DataSorter.java(和上一篇一样) public class DataSorter { public static void sort(Comparable [] a) { int index; //保存每次比较,最大值的下标; for(int