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 是 ⼀个接 ⼝,定制排序规则。 对实现它的每个类的对象进 ⾏整体排序,⾥ ⾯ 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 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,....
循环遍历集合 //普通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() //删除指针的上⼀个元素(容易出问题....
容器 容器主要用来保存对象,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:基于数组实现,....
哈希表 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)⽽直接进 ⾏访问的数据结 构。也就是说,它通过把关键码值映射到表中 ⼀个位置来访问记录,以加快查找的速度 。这 个映射函数叫做散列函数,存放记录的数组叫做散列表。 给定表 M,存在函数 f(key),对任意 给定的关键字值 key,代 ⼊函数后若能得到包含该关键字的记录在表中的地址,则称表 M 为哈 希(Hash)表,函数 f(key)为哈希(Hash) 函数。 散列函数 能使对 ⼀个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位。 链式哈希表 是由 ⼀组链表构成,每个链表都可以看做是 ⼀个“桶”,我们将所有的元素通过散列的 ⽅式放 到具体的不同的桶中。 插 ⼊元素时,⾸先将其键传 ⼊ ⼀个哈希函数,函数通过散列的 ⽅式告知元素属于哪个“桶”,然 后在相应的链表插 ⼊元素。 查找或删除元素时,⽤同们的 ⽅式先找到元素的“桶”,然后遍历相应的链表,直到发现我们想要的元素。 链表长度:因为每个“桶”都是 ⼀个链表,如果表变得太 ⼤,它的性能将会降低。 *** 哈希扩容:Bu....
错误 程序运行时发生的不被期望的事件,阻 ⽌了程序按照预期正常执行。常见程序错误分三类: 编译错误:没有遵循语法规范。 运行时错误:程序在执行时发生的错误。 逻辑错误:程序没有按照预期的逻辑顺序执行。 Java 异常体系 个 java.lang.Throwable 类是 Java 中所有错误和异常的超类,其派生的两个子类分别为:Error、Exception。 Error 包含大量子类,用于抽象出错后程序无法处理的情况,例如:OutOfMemoryError。 Exception 包含大量子类,用于抽象程序本身可以处理的异常。例如:ArrayIndexOutOfBoundException。同时 Exception 又派生出量大子类: 运行时异常(不可查异常):RuntimeException 类及其子类,例如:ArrayIndexOutOfBoundsException。ClassNotFoundException。 非运行时异常(编译时可查异常):所有 Exception 类及其子类(RuntimeException 类及其子类除外),例如:IOException。....