摘要:
类 java.util.Collections 提供了对Set、List、Map进行排序、填充、查找元素的辅助方法。 1. void sort(List) //对List容器内的元素排序,排序的规则是按照升序进行排序。 2. void shuffle(List) //对List容器内的元素进行随机排 阅读全文
posted @ 2021-09-21 20:51
女王不带冠
阅读(45)
评论(0)
推荐(0)
摘要:
【示例】遍历List方法一:普通for循环 1 2 3 4 for(int i=0;i<list.size();i++){//list为集合的对象名 String temp = (String)list.get(i); System.out.println(temp); } 【示例】遍历List方法 阅读全文
posted @ 2021-09-21 20:50
女王不带冠
阅读(589)
评论(0)
推荐(0)
摘要:
迭代器为我们提供了统一的遍历容器的方式,参见以下示例代码: 【示例】迭代器遍历List 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class Test { public static void main(String[] args) { 阅读全文
posted @ 2021-09-21 20:49
女王不带冠
阅读(243)
评论(0)
推荐(0)
摘要:
TreeSet底层实际是用TreeMap实现的,内部维持了一个简化版的TreeMap,通过key来存储Set的元素。 TreeSet内部需要对存储的元素进行排序,因此,我们对应的类需要实现Comparable接口。这样,才能根据compareTo()方法比较对象之间的大小,才能进行内部排序。 【示例 阅读全文
posted @ 2021-09-21 20:48
女王不带冠
阅读(244)
评论(0)
推荐(0)
摘要:
大家在做下面练习时,重点体会“Set是无序、不可重复”的核心要点。 【示例】HashSet的使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class Test { public static void main(String[] args) { Set<Str 阅读全文
posted @ 2021-09-21 20:47
女王不带冠
阅读(119)
评论(0)
推荐(0)
摘要:
HashSet是采用哈希算法实现,底层实际是用HashMap实现的(HashSet本质就是一个简化版的HashMap),因此,查询效率和增删效率都比较高。我们来看一下HashSet的源码: 我们发现里面有个map属性,这就是HashSet的核心秘密。我们再看add()方法,发现增加一个元素说白了就是 阅读全文
posted @ 2021-09-21 20:47
女王不带冠
阅读(207)
评论(0)
推荐(0)
摘要:
TreeMap是红黑二叉树的典型实现。我们打开TreeMap的源码,发现里面有一行核心代码: 1 private transient Entry<K,V> root = null; root用来存储整个树的根节点。我们继续跟踪Entry(是TreeMap的内部类)的代码: 可以看到里面存储了本身数据 阅读全文
posted @ 2021-09-21 20:46
女王不带冠
阅读(289)
评论(0)
推荐(0)
摘要:
Set接口继承自Collection,Set接口中没有新增方法,方法和Collection保持完全一致。我们在前面通过List学习的方法,在Set中仍然适用。因此,学习Set的使用将没有任何难度。 Set容器特点:无序、不可重复。无序指Set中的元素没有索引,我们只能遍历查找;不可重复指不允许加入重 阅读全文
posted @ 2021-09-21 20:46
女王不带冠
阅读(43)
评论(0)
推荐(0)
摘要:
二叉树的定义 二叉树是树形结构的一个重要类型。 许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。 二叉树(BinaryTree)由一个节点及两棵互不相交的、分别称作这个根的左子树和右子树的二叉树组 阅读全文
posted @ 2021-09-21 20:45
女王不带冠
阅读(391)
评论(0)
推荐(0)
摘要:
HashMap底层实现采用了哈希表,这是一种非常重要的数据结构。对于我们以后理解很多技术都非常有帮助(比如:redis数据库的核心技术和HashMap一样),因此,非常有必要让大家理解。 数据结构中由数组和链表来实现对数据的存储,他们各有特点。 (1) 数组:占用空间连续。 寻址容易,查询速度快。但 阅读全文
posted @ 2021-09-21 20:43
女王不带冠
阅读(2294)
评论(1)
推荐(1)
摘要:
HashMap采用哈希算法实现,是Map接口最常用的实现类。 由于底层采用了哈希表存储数据,我们要求键不能重复,如果发生重复,新的键值对会替换旧的键值对。 HashMap在查找、删除、修改方面都有非常高的效率。 【示例】Map接口中的常用方法 1 2 3 4 5 6 7 8 9 10 11 12 1 阅读全文
posted @ 2021-09-21 20:42
女王不带冠
阅读(79)
评论(0)
推荐(0)
摘要:
现实生活中,我们经常需要成对存储某些信息。比如,我们使用的微信,一个手机号只能对应一个微信账户。这就是一种成对存储的关系。 Map就是用来存储“键(key)-值(value) 对”的。 Map类中存储的“键值对”通过键来标识,所以“键对象”不能重复。 Map 接口的实现类有HashMap、TreeM 阅读全文
posted @ 2021-09-21 20:41
女王不带冠
阅读(90)
评论(0)
推荐(0)
摘要:
LinkedList底层用双向链表实现的存储。特点:查询效率低,增删效率高,线程不安全。 双向链表也叫双链表,是链表的一种,它的每个数据节点中都有两个指针,分别指向前一个节点和后一个节点。 所以,从双向链表中的任意一个节点开始,都可以很方便地找到所有节点。 每个节点都应该有3部分内容: 1 2 3 阅读全文
posted @ 2021-09-21 20:40
女王不带冠
阅读(188)
评论(0)
推荐(0)
摘要:
Vector底层是用数组实现的List,相关的方法都加了同步检查,因此“线程安全,效率低”。 比如,indexOf方法就增加了synchronized同步标记。 老鸟建议 如何选用ArrayList、LinkedList、Vector? 1. 需要线程安全时,用Vector。 2. 不存在线程安全问 阅读全文
posted @ 2021-09-21 20:40
女王不带冠
阅读(45)
评论(0)
推荐(0)
摘要:
ArrayList底层是用数组实现的存储。 特点:查询效率高,增删效率低,线程不安全。我们一般使用它。查看源码: 我们可以看出ArrayList底层使用Object数组来存储元素数据。所有的方法,都围绕这个核心的Object数组来开展。 我们知道,数组长度是有限的,而ArrayList是可以存放任意 阅读全文
posted @ 2021-09-21 20:39
女王不带冠
阅读(228)
评论(0)
推荐(0)
摘要:
List是有序、可重复的容器。 有序:List中每个元素都有索引标记。可以根据元素的索引标记(在List中的位置)访问元素,从而精确控制这些元素。 可重复:List允许加入重复的元素。更确切地讲,List通常允许满足 e1.equals(e2) 的元素重复加入容器。 除了Collection接口中的 阅读全文
posted @ 2021-09-21 20:38
女王不带冠
阅读(341)
评论(0)
推荐(0)
摘要:
Collection 表示一组对象,它是集中、收集的意思。Collection接口的两个子接口是List、Set接口。 表9-1 Collection接口中定义的方法 由于List、Set是Collection的子接口,意味着所有List、Set的实现类都有上面的方法。我们下一节中,通过ArrayL 阅读全文
posted @ 2021-09-21 20:37
女王不带冠
阅读(208)
评论(0)
推荐(0)
摘要:
我们可以在类的声明处增加泛型列表,如:<T,E,V>。 此处,字符可以是任何标识符,一般采用这3个字母。 【示例】泛型类的声明 1 2 3 4 5 6 7 8 9 10 class MyCollection<E> {// E:表示泛型; Object[] objs = new Object[5]; 阅读全文
posted @ 2021-09-21 20:36
女王不带冠
阅读(47)
评论(0)
推荐(0)
摘要:
容器相关类都定义了泛型,我们在开发和工作中,在使用容器类时都要使用泛型。这样,在容器的存储数据、读取数据时都避免了大量的类型判断,非常便捷。 【示例】泛型类的在集合中的使用 1 2 3 4 5 6 7 8 9 public class Test { public static void main(S 阅读全文
posted @ 2021-09-21 20:36
女王不带冠
阅读(73)
评论(0)
推荐(0)
摘要:
开发和学习中需要时刻和数据打交道,如何组织这些数据是我们编程中重要的内容。 我们一般通过“容器”来容纳和管理数据。那什么是“容器”呢?生活中的容器不难理解,是用来容纳物体的,如锅碗瓢盆、箱子和包等。程序中的“容器”也有类似的功能,就是用来容纳和管理数据。 事实上,我们第七章所学的数组就是一种容器,可 阅读全文
posted @ 2021-09-21 20:35
女王不带冠
阅读(39)
评论(0)
推荐(0)
摘要:
JDK1.5引入了枚举类型。枚举类型的定义包括枚举声明和枚举体。格式如下: 1 2 3 enum 枚举名 { 枚举体(常量列表) } 枚举体就是放置一些常量。我们可以写出我们的第一个枚举类型,如示例所示: 【示例】创建枚举类型 1 2 3 enum Season { SPRING, SUMMER, 阅读全文
posted @ 2021-09-21 10:46
女王不带冠
阅读(105)
评论(0)
推荐(0)
摘要:
本节结合前面给大家讲的递归算法,展示目录结构。大家可以先建立一个目录,下面增加几个子文件夹或者文件,用于测试。 【示例】使用递归算法,以树状结构展示目录树 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 阅读全文
posted @ 2021-09-21 10:45
女王不带冠
阅读(156)
评论(0)
推荐(0)
摘要:
java.io.File类:代表文件和目录。 在开发中,读取文件、生成文件、删除文件、修改文件的属性时经常会用到本类。 File类的常见构造方法:public File(String pathname) 以pathname为路径创建File对象,如果pathname是相对路径,则默认的当前路径在系统 阅读全文
posted @ 2021-09-21 10:44
女王不带冠
阅读(417)
评论(0)
推荐(0)
摘要:
java.lang.Math提供了一系列静态方法用于科学计算;其方法的参数和返回值类型一般为double型。如果需要更加强大的数学运算能力,计算高等数学中的相关内容,可以使用apache commons下面的Math类库。 Math类的常用方法: 1. abs 绝对值 2. acos,asin,at 阅读全文
posted @ 2021-09-21 10:42
女王不带冠
阅读(104)
评论(0)
推荐(0)
摘要:
Calendar 类是一个抽象类,为我们提供了关于日期计算的相关功能,比如:年、月、日、时、分、秒的展示和计算。 GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。 菜鸟雷区 注意月份的表示,一月是0,二月是1,以此类推,12月 阅读全文
posted @ 2021-09-21 10:41
女王不带冠
阅读(333)
评论(0)
推荐(0)
摘要:
·DateFormat类的作用 把时间对象转化成指定格式的字符串。反之,把指定格式的字符串转化成时间对象。 DateFormat是一个抽象类,一般使用它的的子类SimpleDateFormat类来实现。 【示例】DateFormat类和SimpleDateFormat类的使用 1 2 3 4 5 6 阅读全文
posted @ 2021-09-21 10:40
女王不带冠
阅读(53)
评论(0)
推荐(0)
摘要:
在标准Java类库中包含一个Date类。它的对象表示一个特定的瞬间,精确到毫秒。 1. Date() 分配一个Date对象,并初始化此对象为系统当前的日期和时间,可以精确到毫秒)。 2. Date(long date) 分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoc 阅读全文
posted @ 2021-09-21 10:39
女王不带冠
阅读(483)
评论(0)
推荐(0)
摘要:
“时间如流水,一去不复返”,时间是一个一维的东东。所以,我们需要一把刻度尺来表达和度量时间。在计算机世界,我们把1970 年 1 月 1 日 00:00:00定为基准时间,每个度量单位是毫秒(1秒的千分之一),如图所示。 我们用long类型的变量来表示时间,从基准时间往前几亿年,往后几亿年都能表示。 阅读全文
posted @ 2021-09-21 10:38
女王不带冠
阅读(49)
评论(0)
推荐(0)
摘要:
· String使用的陷阱 String一经初始化后,就不会再改变其内容了。对String字符串的操作实际上是对其副本(原始拷贝)的操作,原来的字符串一点都没有改变。比如: String s ="a"; 创建了一个字符串 s = s+"b"; 实际上原来的"a"字符串对象已经丢弃了,现在又产生了另一 阅读全文
posted @ 2021-09-21 10:37
女王不带冠
阅读(66)
评论(0)
推荐(0)
摘要:
String 类对象代表不可变的Unicode字符序列,因此我们可以将String对象称为“不可变对象”。 那什么叫做“不可变对象”呢?指的是对象内部的成员变量的值无法再改变。我们打开String类的源码,如图8-8所示: 图8-8 String类的部分源码 我们发现字符串内容全部存储到value[ 阅读全文
posted @ 2021-09-21 10:36
女王不带冠
阅读(95)
评论(0)
推荐(0)
摘要:
StringBuffer和StringBuilder非常类似,均代表可变的字符序列。 这两个类都是抽象类AbstractStringBuilder的子类,方法几乎一模一样。我们打开AbstractStringBuilder的源码,如示例8-11所示: 【示例8-11】AbstractStringBu 阅读全文
posted @ 2021-09-21 10:36
女王不带冠
阅读(40)
评论(0)
推荐(0)
摘要:
整型、char类型所对应的包装类,在自动装箱时,对于-128~127之间的值会进行缓存处理,其目的是提高效率。 缓存处理的原理为:如果数据在-128~127这个区间,那么在类加载时就已经为该区间的每个数值创建了对象,并将这256个对象存放到一个名为cache的数组中。每当自动装箱过程发生时(或者手动 阅读全文
posted @ 2021-09-21 10:35
女王不带冠
阅读(122)
评论(0)
推荐(0)
摘要:
对于包装类来说,这些类的用途主要包含两种: 1. 作为和基本数据类型对应的类型存在,方便涉及到对象的操作,如Object[]、集合等的操作。 2. 包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法(这些操作方法的作用是在基本数据类型、包装类对象、字符串之间提供相互之间的转化!)。 阅读全文
posted @ 2021-09-21 10:34
女王不带冠
阅读(416)
评论(0)
推荐(0)
摘要:
自动装箱和拆箱就是将基本数据类型和包装类之间进行自动的互相转换。JDK1.5后,Java引入了自动装箱(autoboxing)/拆箱(unboxing)。 自动装箱: 基本类型的数据处于需要对象的环境中时,会自动转为“对象”。 我们以Integer为例:在JDK1.5以前,这样的代码 Integer 阅读全文
posted @ 2021-09-21 10:34
女王不带冠
阅读(282)
评论(0)
推荐(0)
摘要:
Java是面向对象的语言,但并不是“纯面向对象”的,因为我们经常用到的基本数据类型就不是对象。但是我们在实际应用中经常需要将基本数据转化成对象,以便于操作。比如:将基本数据类型存储到Object[]数组或集合中的操作等等。 为了解决这个不足,Java在设计类时为每个基本数据类型设计了一个对应的类进行 阅读全文
posted @ 2021-09-21 10:33
女王不带冠
阅读(157)
评论(0)
推荐(0)
摘要:
正常学习和开发中,我们经常会遇到各种异常。大家在遇到异常时,需要遵循下面四步来解决: 1. 细心查看异常信息,确定异常种类和相关Java代码行号; 2. 拷贝异常信息到百度,查看相关帖子,寻找解决思路; 3. 前两步无法搞定,再问同学或同事; 4. 前三步无法搞定,请示领导。 很多同学碰到异常一下就 阅读全文
posted @ 2021-09-21 10:32
女王不带冠
阅读(120)
评论(0)
推荐(0)
摘要:
.在程序中,可能会遇到JDK提供的任何标准异常类都无法充分描述清楚我们想要表达的问题,这种情况下可以创建自己的异常类,即自定义异常类。 2.自定义异常类只需从Exception类或者它的子类派生一个子类即可。 3.自定义异常类如果继承Exception类,则为受检查异常,必须对其进行处理;如果不想处 阅读全文
posted @ 2021-09-21 10:31
女王不带冠
阅读(324)
评论(0)
推荐(0)
摘要:
当CheckedException产生时,不一定立刻处理它,可以再把异常throws出去。 在方法中使用try-catch-finally是由这个方法来处理异常。但是在一些情况下,当前方法并不需要处理发生的异常,而是向上传递给调用它的方法处理。 如果一个方法中可能产生某种异常,但是并不能确定如何处理 阅读全文
posted @ 2021-09-21 10:30
女王不带冠
阅读(269)
评论(0)
推荐(0)
摘要:
捕获异常是通过3个关键词来实现的:try-catch-finally。用try来执行一段程序,如果出现异常,系统抛出一个异常,可以通过它的类型来捕捉(catch)并处理它,最后一步是通过finally语句为异常处理提供一个统一的出口,finally所指定的代码都要被执行(catch语句可有多条;fi 阅读全文
posted @ 2021-09-21 10:29
女王不带冠
阅读(679)
评论(0)
推荐(0)
摘要:
所有不是RuntimeException的异常,统称为Checked Exception,又被称为“已检查异常”,如IOException、SQLException等以及用户自定义的Exception异常。 这类异常在编译时就必须做出处理,否则无法通过编译。如图6-9所示。 如图所示,异常的处理方式 阅读全文
posted @ 2021-09-21 10:28
女王不带冠
阅读(148)
评论(0)
推荐(0)
摘要:
派生于RuntimeException的异常,如被 0 除、数组下标越界、空指针等,其产生比较频繁,处理麻烦,如果显式的声明或捕获将会对程序可读性和运行效率影响很大。 因此由系统自动检测并将它们交给缺省的异常处理程序(用户可不必对其处理)。 这类异常通常是由编程错误导致的,所以在编写程序时,并不要求 阅读全文
posted @ 2021-09-21 10:25
女王不带冠
阅读(1214)
评论(0)
推荐(0)
摘要:
Error是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,Java虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMe 阅读全文
posted @ 2021-09-21 10:24
女王不带冠
阅读(23)
评论(0)
推荐(0)
摘要:
Exception是程序本身能够处理的异常,如:空指针异常(NullPointerException)、数组下标越界异常(ArrayIndexOutOfBoundsException)、类型转换异常(ClassCastException)、算术异常(ArithmeticException)等。 Ex 阅读全文
posted @ 2021-09-21 10:24
女王不带冠
阅读(469)
评论(0)
推荐(0)
摘要:
JDK 中定义了很多异常类,这些类对应了各种各样可能出现的异常事件,所有异常对象都是派生于Throwable类的一个实例。如果内置的异常类不能够满足需要,还可以创建自己的异常类。 Java对异常进行了分类,不同类型的异常分别用不同的Java类表示,所有异常的根类为java.lang.Throwabl 阅读全文
posted @ 2021-09-21 10:23
女王不带冠
阅读(120)
评论(0)
推荐(0)
摘要:
在实际工作中,我们遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求;你的程序要打开某个文件,这个文件可能不存在或者文件格式不对;你要读取数据库的数据,数据可能是空的;我们的程序再运行着,但是内存或硬盘可能满了等等。 软件程序在运行过程中,非常可能遇到刚刚提到的这些问题, 阅读全文
posted @ 2021-09-21 10:22
女王不带冠
阅读(50)
评论(0)
推荐(0)
摘要:
异常指程序运行过程中出现的非正常现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等。 在Java的异常处理机制中,引进了很多用来描述和处理异常的类,称为异常类。异常类定义中包含了该类异常的信息和对异常进行处理的方法。 所谓异常处理,就是指程序在出现问题时依然可以正确的执行完。 我 阅读全文
posted @ 2021-09-21 10:22
女王不带冠
阅读(1432)
评论(0)
推荐(0)

浙公网安备 33010602011771号