目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

标签: Java (110)

HashCode、Equals

HashCode 方法 顶级类 Object⾥ ⾯的 ⽅法,所有类都是继承 Object 的,返回值 int 类型。 根据 ⼀定的 hash 规则(存储地址,字段,或者 ⻓度等),映射成 ⼀个数值,即散列值。 Equals 方法 顶级类 Object⾥ ⾯的 ⽅法,所有类都是继承 Object 的,返回值 boolean 类型。 根据 ⾃定义的匹配规则,⽤于匹配两个对象是否 ⼀样, ⼀般逻辑是如下: 重写规则如下: /** * 1、判断地址是否⼀样 * 2、⾮空判断和class类型判断 * 3、强转 * 4、对象里面的字段一一匹配 */ @Override public boolean equals(Object o) { //判断地址是否一样 if (this == o) { return true; } //⾮空判断和class类型判断 if (o == null || getClass() != o.getClass()) { return false; } //强转 Student student = (Student) o; //对象里面的字段一一匹配 return ....

Objects工具类

Objects 工具类 jdk1.7 引进的 ⼯具类,都是静态调 ⽤的 ⽅法,jdk1.8 新增了部分 ⽅法。 重点方法 equals:⽤于字符串和包装对象的 ⽐较,先 ⽐较内存地址,再 ⽐较值 String str1 = "abc"; String str2 = "abc"; System.out.println(Objects.equals(str1, str2)); //true deepEquals:数组的 ⽐较,先 ⽐较内存地址,再 ⽐较值,如 String/char/byte/int 数组, 或者包 装类型 Integer 等数组。 String[] arr1 = {"aa", "bb", "cc"}; String[] arr2 = {"aa", "bb", "cc"}; System.out.println(Objects.deepEquals(arr1,arr2)); //true hashCode:返回对象的 hashCode,若传 ⼊的为 null,返回 0 System.out.println(Objects.hashCode("abc"))....

Comparable排序接口

Comparable 是 ⼀个接 ⼝,定制排序规则。 对实现它的每个类的对象进 ⾏整体排序,⾥ ⾯ compareTo ⽅法是实现排序的具体 ⽅法。 比如 TreeSet、SortedSet、Collections.sort() ⽅法调 ⽤进 ⾏排序。 String、Integer 等类默认实现了这个接 ⼝,所以可以排序(看源码)。 Comparable 适合于排序规则固定的情况,Comparator(匿名内部类)适合于排序规则变化的情况。 public interface Comparable<T> { public int compareTo(T o); } POJO 类需要实现 Comparable 接口 package com.javase.demo; import lombok.AllArgsConstructor; import lombok.Data; @AllArgsConstructor @Data public class Student implements Comparable{ private String name; private int....

Collections工具类

Collections  Java⾥关于集合的 ⼯具类,包含有各种有关集合操作的静态多态 ⽅法,不能实例化(把构造函 数私有化)。 Collection 与 Collections 区别 Collection 是接 ⼝,提供了对集合对象进 ⾏基本操作的通 ⽤接 ⼝ ⽅法,List、Set 等多种具体的 实现类。 Collections 是 ⼯具类,专 ⻔操作 Collection 接 ⼝实现类 ⾥ ⾯的元素。 常见方法 排序 @Test public void collectionsIteratorTesting() { ArrayList<String> list = new ArrayList<>(); list.add("bbb"); list.add("aaa"); list.add("ccc"); System.out.println(list);////不指定排序,默认按照自然升序排序 [aaa, bbb, ccc] Collections.sort(list,Comparator.naturalOrder()); //升序 [aaa, bbb,....

Iterator(迭代器)

循环遍历集合 //普通for循环 for (int i = 0; i < list.size(); i++) {} //增强for循环 for (String str : list) {} 迭代器(Iterator)  Iterator 是 Java 中的 ⼀个接 ⼝,核 ⼼作 ⽤就是 ⽤来遍历容器的元素,当容器实现了 Iterator 接 ⼝后,可以通过调 ⽤ Iterator()⽅法获取 ⼀个 Iterator 对象。  因为容器的实现有多种,不同的容器遍历规则不 ⼀样,⽐如 ArrayList/LinkedList/HashSet/TreeSet 等,所以设计了 Iterator 接 ⼝,让容器本身去实 现这个接 ⼝,实现 ⾥ ⾯的 ⽅法,从 ⽽让开发 ⼈员不 ⽤关系容器的遍历机制,直接使 ⽤对应的 ⽅法即可。 核心方法 //⽤于判断iterator内是否有下个元素,如果有则返回true,没有则false boolean hashNext() //返回iterator的下⼀个元素,同时指针也会向后移动1位 Obejct next() //删除指针的上⼀个元素(容易出问题....

Collection、Map

容器  容器主要用来保存对象,Java 中有两个顶层接口 Collection、Map。 Collection 接口 List 有序、重复、自动扩容、非线程安全:常见 List 的实现类有 ArrayList、Vector、LinkedList 等…… Set 无序、不可重复、非线程安全:常见 Set 接口的实现类有 HashSet、LinedHashSet、TreeSet 等…… Map 接口 key value 存储:常见的 Map 接口实现类有 HashMap、TreeMap。 接口抽象与数据结构  通过接口的抽象,很好的屏蔽了底层数据结构的差异,并且为开发者提供了统一的 API 来使用底层不同的实现类。 List 接口 List 数据结构  List 接口是 ⼀个有序的 Collection,线性列表接 ⼝,能够精确的控制每个元素插 ⼊的位置,能 够通过索引(类似于数组的下标)来访问 List 中的元素,第 ⼀个元素的索引为 0,⽽且允许有相同 的元素,接 ⼝存储 ⼀组不唯 ⼀,有序(插 ⼊顺序)的对象。 List 接口的实现类 ArrayList:基于数组实现,....

HashTable

哈希表  散列表(Hash table,也叫哈希表),是根据关键码值(Key value)⽽直接进 ⾏访问的数据结 构。也就是说,它通过把关键码值映射到表中 ⼀个位置来访问记录,以加快查找的速度 。这 个映射函数叫做散列函数,存放记录的数组叫做散列表。 给定表 M,存在函数 f(key),对任意 给定的关键字值 key,代 ⼊函数后若能得到包含该关键字的记录在表中的地址,则称表 M 为哈 希(Hash)表,函数 f(key)为哈希(Hash) 函数。 散列函数  能使对 ⼀个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位。 链式哈希表 是由 ⼀组链表构成,每个链表都可以看做是 ⼀个“桶”,我们将所有的元素通过散列的 ⽅式放 到具体的不同的桶中。 插 ⼊元素时,⾸先将其键传 ⼊ ⼀个哈希函数,函数通过散列的 ⽅式告知元素属于哪个“桶”,然 后在相应的链表插 ⼊元素。 查找或删除元素时,⽤同们的 ⽅式先找到元素的“桶”,然后遍历相应的链表,直到发现我们想要的元素。 链表长度:因为每个“桶”都是 ⼀个链表,如果表变得太 ⼤,它的性能将会降低。 *** 哈希扩容:Bu....