![](https://img-blog.csdnimg.cn/20190927151053287.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JavaSE
java学习过程中的笔记和demo
枸杞仙人
这个作者很懒,什么都没留下…
展开
-
TreeSet对String的排序
TreeSet集合底层是一个TreeMapTreeMap集合底层是一个二叉树放到TreeSet集合中的元素等同于放到TreeMap集合key部分TreeSet集合中的元素:无序不可重复,但是可以按照元素大小顺序自动排序TreeSet集合放进去无序,拿出来有序package collection;import java.util.TreeSet;public class TreeSetTest02 { public static void main(String[] args) .原创 2020-10-06 20:44:49 · 1281 阅读 · 0 评论 -
属性类Properties
目前只需掌握Properties属性类对象的相关方法即可Properties是一个Map集合,继承Hashtable,Properties的key和value都是String类型Properties被称为属性类对象.Properties是线程安全的。需要掌握Properties的存和取两个方法。package collection;import java.util.Properties;public class PropertiesTest01 { public static v.原创 2020-10-06 20:33:13 · 130 阅读 · 0 评论 -
Hashtable和HashMap的区别
HashMap 的 key 可以是null吗HashMap允许key为null,并且key重复的话value会覆盖。Hashtable的key可以是null吗不行,hashtable的key和value都不能是null。hashtable上来就调key的hashcode。hashtable方法带有synchronized:线程安全。但是线程安全有其他方案,hashtable效率较低使用较少。Hashtable底层还是哈希表。hashtable的初始化是11,加载因子是0.75.扩容原创 2020-10-06 20:22:04 · 208 阅读 · 0 评论 -
Java的HashMap拓展及连个方法的重写
HashMap集合的默认初始化容量是16,加载因子是0.75。当Hashmap集合底层数组的容量达到75%的时候,数组开始扩容。重点:记住hashmap集合初始化容量必须是2的倍数,这是官方推荐的,这是为了达到三列分布均匀,为了提高hashmap集合的存储效率equals方法重写了那么hashcode方法必须重写,并且如果equals方法返回值是true,那么hashcode返回值必须相等。equals方法返回true表示两个对象相同,在同一个单向链表上比较。那么对于一个单向链表上的节点来说,他们的哈希.原创 2020-09-13 21:46:02 · 465 阅读 · 0 评论 -
Java的HashMap
HashMap集合底层是一个哈希表/散列表的数据结构哈希表是一个怎么样的数据结构?哈希表是一个数组和单向链表的结合体数组:在查询方面效率高,随机增删效率高单项链表:相反哈希表将以上两种数据结构融合在一起,充分发挥各自的优点HashMap集合底层的源代码public class HashMap{ //HashMap底层实际是一个一维数组 Node<K,V>[] table; //静态内部类HashMap.Node static class Node&原创 2020-09-08 23:21:24 · 100 阅读 · 0 评论 -
Java的Map的遍历
两种方法获取所有key,通过遍历key来遍历valueSet<Map.Entry<K,V>> entrySet()package collection;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;public class MapTest02 { public static void main(String[] .原创 2020-09-07 22:42:19 · 105 阅读 · 0 评论 -
Java的Map接口常用方法
Map 和Collection没有继承关系Map集合用key和value存储数据,key和calue都是引用数据类型,存储的都是数据的内存地址。其中key其主导作用,value只是key的附属品V put(K key, K value) 添加键值对void clear() 清空mapboolean containsKey(Object key) 判断map中是否包含某个 keyboolean containsValue(Object value) 判断map中是否包含某个..原创 2020-09-07 20:13:23 · 199 阅读 · 0 评论 -
Java静态内部类
根据名称出发,静态内部类就是在一个类中的私有类,且只能是静态类。可以通过OuterClass.InnerClass 的方法调用其属性和方法package collection;import java.util.HashSet;import java.util.Set;public class MyClass { //声明一个静态内部类 private static class InnerClass{ //静态方法 public static .原创 2020-09-07 20:06:11 · 158 阅读 · 0 评论 -
Java的Set集合简述
HashSetHashSet集合:无序不可重复放到HashSet中的元素其实是方法哦HashMap的key里了package collection;import java.util.HashSet;import java.util.Iterator;import java.util.Set;public class HashSetTest01 { public static void main(String[] args) { //演示一下HashSet集原创 2020-09-07 19:16:53 · 131 阅读 · 0 评论 -
Java泛型自动类型推断和自定义泛型
JDK8之后推出了自动类型推断,又称为钻石表达式List<Animal> myList = new ArrayList<>();package collection;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class GenericTest02 { public static void main(String[] args)..原创 2020-09-03 16:47:36 · 380 阅读 · 0 评论 -
Java泛型机制
泛型是指在创建集合对象或者集合的迭代器的时候,指定内部元素的类型,使得内部元素只能是这个确定的类型。JDK5.0后推出的新特性:泛型泛型这种语法机制只在程序编译阶段起作用,只是给编译器参考的,运行阶段意义不大使用了泛型的好处:集合中存储的元素类型同意了从集合中取出的元素类型是泛型指定的类型,不需要强制转型泛型的缺点:集合中存储的元素缺乏多样性大多数业务中集合中元素的类型是统一的,所以这种泛型特性被大家认可package collection;import java.util.A.原创 2020-08-29 14:54:39 · 170 阅读 · 0 评论 -
Java的LinkedList类(双向链表)
双向链表双向类表的基本单元还是节点Node,每个节点都有三个属性:1、存储的数据 2、下一个节点的地址3、上一个节点的地址Linked集合尅有初始化容量,最初这个链表没有任何元素,first和last都是null不管是LinkedList还是ArrayList,写代码时不许哟啊关心具体是哪个集合,因为我们是面向接口编程,调用的都是接口中的方法我们创建LinkedList对象后对其进行add操作本质是调用了底层的linkLast方法 void linkLast(E e) {原创 2020-08-29 13:32:03 · 1663 阅读 · 1 评论 -
Java的单向链表
单向链表中的节点是链表的基本单元,每个节点都有两个属性:1、存储的数据 2、下一个节点的地址链表优点:随机增删元素效率较高,因为增删元素不涉及大量元素的位移链表缺点:查询效率低,每一次查找某个元素的时候都要从头节点往下遍历以demo为例解释什么是链表首先我们定义一个链表类,其中包含添加、删除、修改、查找等方法。并且定义了头节点header属性和size属性package collection;public class Link { //头节点 Node ..原创 2020-08-29 10:36:08 · 203 阅读 · 0 评论 -
Java集合ArrayList的容量问题
初始化和扩容ArrayList集合初始化容量是10ArrayList集合底层是Object类型的数组初始化的时候可以选择默认容量为10的构造方法,也可以调用自定义容量的有参构造默认初始化容量10是在底层创建了一个长度为0的数组,在添加第一个元素的时候才初始化容量10扩容:当容量使用完了之后,如果还想往里面加元素,底层会调用一个位运算,增长之后的容量是之前的1.5倍, 数组扩容效率比较低,优化方法:在创建数组时预估初始化容量,减少数组扩容次数数组的优点:检索效率比较高数组缺点随机增删原创 2020-08-29 10:02:43 · 868 阅读 · 0 评论 -
Java的List集合的常用方法
List特点:有序可重复具有所有Collection的方法,也有自己特有的方法以下只列出List接口特有的常用的方法void add(int index,E element)E get(int index)int indexOf(Object o)int lasIndexOf(Object o)E remove(int index)E set(int index, E element)package collection;import javax.sound.midi.Soun.原创 2020-08-28 23:20:40 · 297 阅读 · 0 评论 -
Java的Collection集合删除元素
Java集合删除元素有两种方法,一是调用对象的remove方法,二是调用迭代器的remove方法,二者有很大的区别普通集合对象的remove方法package collection;import java.util.ArrayList;import java.util.Collection;public class CollectionTest05 { public static void main(String[] args) { Collection cc =.原创 2020-08-28 22:38:24 · 1234 阅读 · 1 评论 -
Java集合Collection类的contains方法
boolean contains(Object o) 判断集合中是否包含某个对象o,如果包含返回true,底层调用了equals方法。放在集合中的元素要重写equals方法,不然比较的是地址。demopackage collection;import java.util.ArrayList;import java.util.Collection;public class CollectionTest04 { public static void main(String[] ar.原创 2020-08-28 19:17:11 · 1057 阅读 · 0 评论 -
Java的Collection集合迭代器
Collection类的迭代(重点)所有Collection类的迭代方法都是通用的方法,即所有它的子类都是可以用的。但是Map集合不能调用在创建集合对象之后,通过调用iterator方法获取迭代器对象Iterator的常用方法:boolean hasNext() 如果有元素可以叠戴,则返回trueboolean hasNext = it.hasNext()Object next() 返回迭代的下一个元素Object obj = it.next()迭代器对象最初原创 2020-08-27 22:26:27 · 133 阅读 · 0 评论 -
Java的Collection接口的常用方法
为什么讲collection接口?因为collection是所有List和Set接口的爸爸,collection有的方法,继承他的接口和实现它的类都有这个方法。Collection中能存放什么元素?没有使用泛型之前,Collection可以存储Object的所有子类型使用泛型后,Collection只能存储某个具体类型java.util.Collection 方法的常用方法boolean add(Object o) 向集合中添加元素int size() 获取集合中元素.原创 2020-08-27 19:45:40 · 179 阅读 · 0 评论 -
Java集合基础知识详解
什么是集合集合实际上就是一个容器,可以容纳其他类型的数据?集合为什么在开发中使用很多?可以一次承载多个对象,在实际开发中,假设连接数据库,数据库中有10条记录,我们可以把它封装成10个对象,然后存放在一个集合中,要用的时候拿出来一起用不能直接存储基本数据类型,也不能存储java对象。集合中存储的是java对象的内存地址。存储的是-引用,集合在java中本身就是一个对象。在java中每一个不同的集合,底层对应不同的数据结构,往不同的集合中存储元素等于把数据放到了不同的数据结构中。不同的数据结构原创 2020-08-27 14:52:15 · 150 阅读 · 0 评论 -
Java枚举类详解
枚举类的作用:程序执行成功但是存在风险,程序中的问题要是能在编译中解决绝不会放在运行期间解决,所以引入枚举类型定义一个存在风险的方法package packagetest.enumtest;/*需求:定义一个方法,计算两个int的商如果计算成功返回1,如果失败返回0程序执行成功但是存在风险,程序中的问题要是能在编译中解决绝不会放在运行期间解决,所以引入枚举类型 */public class EnumTest01 { //入口 public static void m.原创 2020-08-27 11:09:50 · 99 阅读 · 0 评论 -
Java数字类
数字格式化package packagetest.number;import java.text.DecimalFormat;/*关于数字格式化数字格式元素# 任意数字,千分位.小数点0 不够补0 */public class NumberTest01 { public static void main(String[] args) { //1.创建数字格式化对象 //需求,加入千分位 DecimalFormat df =.原创 2020-08-27 10:56:50 · 94 阅读 · 0 评论 -
Java日期类详解
JavaDate类包括获取当前时间、获取指定时间、日期类型数据和字符串相互转换,格式化日期等package packagetest.date;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class DateTest01 { public static void main(String[] args) { //获取1970年.原创 2020-08-27 09:57:00 · 145 阅读 · 0 评论 -
Java包装类的自动装箱和自动拆箱
package packagetest.baozhuang;/*自动装箱 自动拆箱 */public class IntegerTest03 { public static void main(String[] args) { //JDK5.0之前的 //int --> Integer(装箱) Integer i1 = new Integer(10); //Integer-->int(拆箱) int原创 2020-08-26 22:39:10 · 144 阅读 · 0 评论 -
Java包装类常用方法
以Integer为例,讲述八大类型的常用方法package packagetest.baozhuang;//以java.lang.Integer类型为例,讲解八种类型public class IntergerTest01 { public static void main(String[] args) { //1. 获取int类型最大值和最小值 System.out.println("int最小值:" + Integer.MIN_VALUE); .原创 2020-08-26 17:31:56 · 605 阅读 · 0 评论 -
Java的StringBuffer和StringBuilder类
StringBuffer和StringBuilder是字符串缓冲器工作原理:预先在内存中申请一块空间,以容纳字符序列如果预留空间不够,则进行自动扩容,以容纳更多字符序列和String的区别:String是不可变的字符序列,存储在字符串常量中StringBuffer底层是一个char数组,但是该char数组是可变的。并且可以自动扩容StringBuffer和StringBuilder的默认初始化容量是16如何优化StringBuffer? 最好在创建StringBuffer之前预测StringB.原创 2020-08-26 16:34:08 · 80 阅读 · 0 评论 -
Java常用类String常用方法
package packagetest;/*字符串常用方法 */public class StringTest06 { public static void main(String[] args) { //1 cahr charAt(int,index); 得到固定位置的char值 char c1 = "abcdef".charAt(2); System.out.println(c1);//c //2 boolean endW原创 2020-08-26 15:26:24 · 94 阅读 · 0 评论 -
Java常用类String基础
重点在代码的注释中String类的不可变性package packagetest;/*java.lang.String 是字符串类型,一旦被创建不可被改变提升字符串访问效率,在程序中使用了缓存技术。所以在java中所有使用双引号括起来的字符串都会在字符串常量池中创建一份方便后续直接访问使用。 */public class StringTest01 { public static void main(String[] args) { String s1 = "abc原创 2020-08-26 14:40:42 · 102 阅读 · 0 评论 -
Java自定义异常
自定义异常使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。用户自定义异常类,只需要继承Exception类就可以了。程序中使用自定义异常类,大体可以分为以下几个步骤:创建自定义异常类在方法中通过throw关键字抛出异常对象如果在当前抛出异常的方法中处理异常,可以用try-catch语句捕获处理;否则在方法声明处通过throws关键字知名要抛出给方法调用者的异常,继续进行下一步操作在出现异常方法的调用者中捕获并处理异常实际应用中的经验总结原创 2020-08-24 23:34:16 · 307 阅读 · 0 评论 -
Java异常处理机制
异常处理机制抛出异常捕获异常异常处理五个关键字try catch finally throw throws基础的try catch finallypackage exception;//假设要捕获多个异常要从小到大捕获,具体大小参考上一讲的图public class Test { public static void main(String[] args) { int a = 1; int b = 0; try原创 2020-08-24 22:40:24 · 85 阅读 · 0 评论 -
Java异常机制
什么是异常实际工作中,遇到的情况不可能是非常完美的。比如:写某个模块,用户输入不一定符合要求,你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据库可能是空的等软件程序在运行过程中非常可能遇到这些异常问题。我们称之为异常,Exception,意思是例外。异常发生在程序运行期间,会影响正常的程序执行流程简单分类检查性异常:最具代表性的检查性异常就是用户错误或问题引起的异常,这是程序员无法预见的。这些异常在编译时不能被简单地忽略运行时异常:运行时异常是可能被程原创 2020-08-24 15:04:52 · 73 阅读 · 0 评论 -
Java内部类
内部类就是在一个类的内部再定义一个类,比如,A类中定义了一个B类,那么B类相对A类就是内部类成员内部类静态内部类局部内部类匿名内部类成员内部类package oop.demo10;public class Outer { private int id = 0001; public void out(){ System.out.println("这是外部类的方法"); } public class Inner{ publ.原创 2020-08-24 14:22:30 · 84 阅读 · 0 评论 -
Java接口的定义与实现
普通类:只有具体实现抽象类:具体实现和规范(抽象方法)都有!接口:只有规范接口就是规范,定义的是一组规则,体现了现实世界中“如果你是。。你必须能。。”的思想,如果你是汽车你必须会跑,如果你是手机,你必须能打电话接口的本质是契约,就像我们的法律一样,制定好大家都遵守OO的精髓是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对了具备抽象能力的语言,就是因为设计模式所研究的,实际上是如何合理地去抽象声明类的关键字是class,声明接口的关键字是inte..原创 2020-08-24 13:54:44 · 326 阅读 · 0 评论 -
Java抽象类
abstract修饰符可以用来修饰方法也可以修饰类,如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么就是抽象类抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类抽象类不能用new关键字来创建对象,它是用来让子类继承的抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则子类也要声明为抽象类抽象类也有构造器存在的意义:把一些内容抽象出来,防止代码重复,提升开发效率抽象类Action Demopack.原创 2020-08-24 09:49:20 · 97 阅读 · 0 评论 -
Java的static关键字详解
最有助于理解的解释:静态用static修饰,静态属性和方法与类同在,类一加载它们就存在,可以直接通过 类名.属性/方法 调用。package oop.demo07;public class Student { private static int age;//静态变量 多线程! private double score;//非静态变量 public void run(){ } public static void walk(){ } .原创 2020-08-24 09:29:15 · 90 阅读 · 0 评论 -
Java类的类型转换和instanceof关键字
关键点都在代码注释中package oop.demo06;public class Application { public static void main(String[] args) { //左侧的实际类型决定了编译是否成功,即左侧的实际类型用于判断一个实例在哪条继承线上 //右侧的指向类型决定了返回结果,即右侧的指向类型是判断一个实例在一个确定的继承线中是否有继承关系 //通式:X instanceof Y //能不能编译通过看X.原创 2020-08-24 09:01:18 · 333 阅读 · 0 评论 -
JDK的安装与卸载
卸载JDK删除java的安装目录删除JAVA-HOME删除path下关于Java的目录java -version安装JDK百度搜索JDK8,找到下载地址同意协议下载对应版本记住安装路径配置环境变量vim ~/.bash_profile配置JAVA-HOME配置path测试JDK是否安装成功java -versionnotepad++...原创 2020-08-17 14:44:28 · 51 阅读 · 0 评论 -
Java递归
递归A方法调用B方法很好理解A方法调用A方法就是递归,即自己调用自己递归可以利用简单的程序来解决一些复杂的问题。它通常把一个大型复杂问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可以描绘出解题过程需要的多次重复计算,大大减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。递归包含两个部分:递归头:什么时候不调用自身。递归体:什么时候调用自身package method;public class Demo06 { public原创 2020-08-20 16:17:48 · 96 阅读 · 1 评论 -
Java可变参数
可变参数JDK1.5开始,Java支持传递同类型的可变参数给一个方法在方法声明中,在指定参数类型后加一个省略号(…)一个方法中只能指定一个可变参数,它必须是方法的最后一个参数,任何普通的参数必须在它之前声明。package method;public class Demo05 { public static void main(String[] args) { //调用可变参数的方法 printMax(34,3,4,55,7); pri原创 2020-08-20 15:35:19 · 118 阅读 · 0 评论 -
Java方法的重载
重载就是在一个类中有相同的函数名称,但形参不同的函数方法重载的规则:方法名必须相同参数列表必须不同(个数不同或类型不同、参数排列顺序不同等)。方法的返回类型可以相同也可以不相同仅仅返回类型不同不足以成为方法的重载实现理论:方法名相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错package method;public class Demo03 { public static void main(St..原创 2020-08-20 13:29:29 · 84 阅读 · 0 评论