自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 IO中对象的序列化与反序列化

序列:排队,把对象转为字节序列,序列化的过程ObjectOutputStream:用于输出对象,把对象转成字节数据输出,对象的输出过程称为序列化。ObjectOutputStream比OutputStream多了很多方法,其中一个是 writeObject(obj)只能将支持 java.io.Serializable 接口的对象写入流中。每个 serializable 对象的类都被编码,编码内容包括类名和类签名、对象的字段值和数组值,以及从初始对象中引用的其他所有对象的闭包。w

2020-07-31 11:45:12 140

原创 数据IO流:DataInputStream和DataOutputStream

程序中有这样一组数据:int num = 10;char c = ‘好’;double d = 88.88;String info = “亚索真好玩!”;boolean good = true;程序运行过程中,想要临时退出,下次希望从这个状态继续恢复执行。希望Java能够输出各种数据类型的数据,读取时,能还原各种数据类型的数据。因为这些数据不是纯文本,那么只能选择字节流。Java中IO流的类的体系设计,隐含了一个设计模式:装饰者设计模式DataOutputStream在Outp

2020-07-30 12:52:24 220

原创 InputStreamReader和OutputStreamWriter进行解码

解码: 字节输入流转字符输入流的转换流,同时还能指定编码方式InputStreamReader:public class TestInputStreamReader { @Test public void test03()throws IOException{ //解码:字节-->字符 FileInputStream fis = new FileInputStream("d:/io.txt"); InputStreamReader isr = new InputStreamR

2020-07-30 12:37:57 160

原创 Buffered缓冲IO流

缓冲IO流:是处理流,负责在其他IO流基础上增加缓冲功能。提高效率BufferedReader —> ReaderBufferedWriter —> WriterBufferedInputStream —> InputStreamBufferedOutputStream —> OutputStreamBufferedReader除了继承了Reader的那些读的方法,还增加了一个:String readLine()读取一行BufferedWriter除了继承了Wr

2020-07-30 11:11:29 304

原创 InputStream和OutputStream

InputStream:(1)int read() :一次读取一个字节,返回本次读取的字节的值(2)int read(byte[] b) :一次读取多个字节,返回本次实际读取字节数,读取的字节存到b数组中,从[0]开始存储,一次最多读取b.length个字节(3)int read(byte[] b, int off, int len) :一次读取多个字节,返回本次实际读取字节数,读取的字节存到b数组中,从[off]开始存储,一次最多读取len个字节(4)close()如果到达流末尾,返回-1

2020-07-30 11:10:11 159

原创 文件的IO操作:FileReader和FileWriter

文件的IO操作:Reader系列:(1)int read() :读取一个字符,正常返回是该字符的Unicode编码值(2)int read(char[] cbuf) :读取多个字符,读取的字符放到cbuf数组中,从cbuf的[0]开始存储,最多读取cbuf.length个实际本次读取的字符的个数(3)int read(char[] cbuf, int off, int len) :读取多个字符,读取的字符放到cbuf数组中,从cbuf的[off]开始存储,最多读取len个实际本次读取的字符的

2020-07-29 16:34:50 182

原创 IO的概述

1、IO:I:input,输入O:output:输出(1)如果对于File对象来说,输入和输出操作只能针对文件,不能针对目录。(2)IO操作不仅仅是针对文件,它可以从网络中输入和输出…(3)输入:输出:参照物是当前程序例如:把数据写到文件中:输出操作 把数据从程序中输出到文件从文件读取数据: 输入操作例如:服务器端发送数据给客户端:对于服务器来说是输出对于客户端来说是输入2、IO的分类(1)方向输入流和输出流(2)操作数据的单位字节流和

2020-07-29 15:07:59 271

原创 文件或目录过滤器

简单的文件或目录过滤器File类中File[] listFiles(FileFilter f)public class Test03 { @Test public void test01(){ //列出D:\atguigu\javaee\JavaSE20190513\code\day01_code目录下的所有的.java文件 File dir = new File("D:/atguigu/javaee/JavaSE20190513/code/day01_code"); File[

2020-07-29 13:05:45 269

原创 目录递归操作:列出所有子目录文件,计算总大小,删除全部子目录

文件夹/目录它不同于文件,因为文件夹中可以放文件,或下一级文件夹。(1)获取文件夹的下一级String[] list();得到下一级文件或目录的名称File[] listFiles():得到下一级文件或目录的File对象(2)求一个目录的总大小(3)删除一个包含子目录,子文件的文件夹public class Test02Dir { @Test public void test04(){ File dir = new File("d:/演示文件夹"); deleteDir(di

2020-07-29 12:37:26 446

原创 io.file类的方法解析

java.io.File:类文件和目录 路径名的抽象表示形式。通俗的讲:File类的对象代表一个文件或一个目录(文件夹)1、路径的分隔符:windows:\ 和 /其他平台:/网络地址:http://www.baidu.com/index.html现在写路径分隔符:(1)/(2)File.separator2、API(1)获取文件或目录的详细信息getName()long length():只能返回文件的大小,不能直接返回目录的大小文件夹的总大小 = 文件夹里面的所有的文件

2020-07-29 11:06:20 230

原创 集合的工具类:Collections

java.util.Collections工具类:(1)public static boolean addAll(Collection<? super T> c,T… elements):把elements这些元素添加到c这个集合中(2)public static int binarySearch(List<? extends Comparable<? super T>> list, T key):在list集合中找出key,用二分查找法此时要求list集合是

2020-07-28 18:23:21 204

原创 泛型的通配符

通配符:wildcard通配符:?1、<?>:代表可以是任意类型2、<? extends 上限>:?代表是上限或上限的子类3、<? super 下限>:?代表的是下限或下限的父类例如:看java.util.Collections:集合工具类(1)public static boolean disjoint(Collection<?> c1, Collection<?> c2)看c1和c2是否有交集,如果没有交集返回true

2020-07-28 16:58:41 233

原创 泛型的使用形式

泛型的使用形式有2种:1、泛型类\泛型接口2、泛型方法一、泛型类/接口1、语法格式:【修饰符】 class 类名<泛型形参列表>{}【修饰符】 interface 接口名<泛型形参列表>{}例如:public interface Collection 就是泛型形参列表public class ArrayList 就是泛型形参列表public class HashMap<K,V> <K,V>就是泛型形

2020-07-28 16:29:54 429

原创 泛型的概述

泛型:JDK1.5之后引入的*泛型:泛化的类型,参数化类型生活中:生产瓶子的厂商,只负责生产瓶子,不管你这个瓶子将来用来装什么。在超市中,大家看到的瓶子上都有标签(商标),表明这个瓶子中是什么。生产饮料、酒、调料的厂商买回这个瓶子后,在装东西时,就给这个瓶子加上商标(标签)。贴上标签后,下次看到时,就知道里面是什么,我可以放心的使用。Java中:例如:在设计集合这个容器的数据结构时,不知道我们程序员会用它来装什么对象。可能用它装字符串对象,可能用它装Apple对象…在设计时不确

2020-07-28 15:53:06 134

原创 JDK1.8的HashMap的源码跟踪及底层实现

JDK1.8的HashMap的底层实现:数组+链表/红黑树几个常量和变量:(1)DEFAULT_INITIAL_CAPACITY:默认的初始容量 16(2)MAXIMUM_CAPACITY:最大容量 1 << 30(3)DEFAULT_LOAD_FACTOR:默认加载因子 0.75(4)TREEIFY_THRESHOLD:默认树化阈值8,当链表的长度达到这个值后,要考虑树化(5)UNTREEIFY_THRESHOLD:默认反树化阈值6,当树中的结点的个数达到这个阈值后,要考虑变为

2020-07-27 15:26:18 143

原创 JDK1.7的HashMap源码分析

Map的底层实现是什么?1、哈希表系列: 数组 + 链表 数组 + 链表/红黑树2、TreeMap:红黑树HashMap的底层实现: JDK1.7以及之前:数组 + 链表 JDK1.8以及之后:数组 + 链表/红黑树数组的优点:访问速度快,因为可以根据下标直接定位到某个元素链表的优点:不需要元素是挨着存储,不需要连续空间,在添加和删除元素时不需要移动元素,只需要修改前后元素的引用关系就可以。 HashMap:会根据key的hashCode-->公式/

2020-07-27 11:24:59 114

原创 Map接口的实现类们

一、Map接口的实现类们:1、HashMap2、Hashtable3、TreeMap4、LinkedHashMap5、Properties二、HashMap和Hashtable 哈希表Hashtable:旧版。线程安全的。它的key和value不能为null。HashMap:相对Hashtable它来说新一点。线程不安全。它允许key和value为null值。具有线程安全对比的:StringBuffer和StringBuilderVector和ArrayListHashtab

2020-07-26 16:15:02 896 1

原创 集合Map接口

1、集合分为两大家族:(1)Collection:一组对象,单身partyList和Set(2)Map:一组键值对,映射关系,情侣party2、Map接口(1)APIput(Object key, Object value)putAll(Map m):将另一个m中是所有的映射关系都添加到当前map中boolean containsKey(Object key) :是否包含某个keyboolean containsValue(Object value) :是否包含某个valueboo

2020-07-26 16:09:23 128

原创 Set子接口及其实现类

一、Set接口1、Set系列的集合的元素是不能重复的。2、Set的实现类们:HashSet、TreeSet、LinkedHashSetSet:如果按照元素的存储顺序来说,有一些是可以保证的,有一些是不能保证的。唯有LinkedHashSet可以保证元素添加的顺序。 如果按照元素的大小顺序来说,有一些是可以保证的,有一些是不能保证的。唯有TreeSet可以保证元素的大小顺序。其中HashSet:既不能保证添加顺序,也不能保证大小顺序。是完全无序的。List:有序的,可重复的 有序

2020-07-26 09:35:51 168

原创 Stack和 LinkedList:源码分析

Stack:栈 源码分析(1)peek返回size-1位置的元素(2)pop①先peek()返回栈顶元素②删除size-1位置的元素(3)push:等价于add把元素添加到[size++]位置public class TestStack { public static void main(String[] args) { Stack s = new Stack(); s.push(1); s.peek(); s.pop(); }}LinkedList:

2020-07-23 16:02:52 240

原创 ArrayList动态数组:源码跟踪

ArrayList动态数组:源码跟踪(1)new ArrayList():JDK1.8版本:发现内部初始化为了一个长度为0的空数组 DEFAULTCAPACITY_EMPTY_ELEMENTDATAJDK1.7版本:也是初始化为长度为0的空数组 EMPTY_ELEMENTDATA;JDK1.6版本:初始化为长度为10的数组为什么要初始化为空数组呢?因为开发中,很多时候创建了ArrayList的对象,但是没有装元素,这个时候的话,如果初始化为10的数组,就浪费空间了。(2)add(Ob

2020-07-23 15:24:39 82

原创 Vector源码跟踪

Vector源码跟踪:(1)new Vector():初始化长度为10的数组,默认增量是0(2)add(E e):默认扩容为原来的2倍如果你手动指定了capacityIncrement的值,那么可以按照你指定增量进行扩容。(3)add(index,e):①考虑扩容②移动元素③添加元素④元素个数增加(4)remove(index):①计算要移动元素的个数②如果需要移动,调用System.arraycopy方法进行移动③elementData[–elementCount] = nul

2020-07-23 14:52:52 144

原创 list接口的实现类们

一、 List接口的实现类们:1、Vector:动态数组物理结构:数组2、ArrayList:动态数组物理结构:数组3、Stack:栈,它是Vector的子类物理结构:数组4、LinkedList:双向链表物理结构:链表二、Vector和ArrayList的区别?(同时也是面试题)Vector:最早版本的动态数组(旧版),线程安全的(有线程同步的),不够后扩容为原来的2倍,初始容量:10, Vector支持的遍历集合的方式有:(1)foreach(2)Iterator(3)支持旧

2020-07-23 13:34:53 882

原创 集合list的子接口

Collection是根接口,没有提供任何直接实现的。它有一些更具体的子接口,例如:List和Set。一、List:列表,接口1、List系列的集合:有序的、可重复的2、List系列的集合:ArrayList(动态数组)、Vector(动态数组,向量类)、 LinkedList(双向链表、双端队列、栈..)、Stack(栈)3、List的APIList接口比Collection接口多了一堆方法:下面列举的方法是比Collection接口多出来,和它一样的就不写了:(1)void a.

2020-07-23 13:33:33 374

原创 Collection集合的三种遍历方式

Collection系列的集合的遍历:挨个访问集合的元素(1)Object[] toArray():先返回数组,然后遍历数组(2)迭代器设计模式每一个Collection系列的集合,内部都自带一个迭代器,类似于,每一趟公交车上都有自己的售票员java.util.Iterator:接口它是所有售票员的标准接口。(1)判断是否还有下一个元素:hasNext()(2)访问它的下一个元素:next()(3)请下一个元素下车:remove()java.util.Iterator:迭代器接口,这.

2020-07-22 17:07:04 950

原创 Collection集合介绍

数据结构,容器:用来装对象…,等各种管理对象的容器。容器有相同的操作标准:(1)增(2)删(3)改(4)查…Java给这些集合抽取两大接口:1、Collection: 规范单值集合的接口,obj --》单身party2、Map 规范对值集合的接口,(key,value) -->情侣party一、Collection1、Collection:接口(1)它是根接口(2)它没有直接的实现类,有更具体的子接口:List和Set…(3)有一些的元素是可.

2020-07-22 11:17:18 187

原创 java手动实现单向链表

单向链表是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从第一个开始。这里我们用java来实现一下单向链表。 和普通的线性结构(如数组)相比,链表结构有以下特点:(1)单个结点创建非常灵活,普通的线性内存通常在创建的时候就需要设定数据的大小(2)结点的删除、插入非常方便,不需要像线性结构那样移动剩下的数据(3)结点的访问方便,可以通过循环或者递归的方法访问到任意数据,但是平均的访问效率低于线性表public class SingleLinkedList { //这里..

2020-07-22 09:41:51 296

原创 java中自定义动态数组实现增删改查

动态数组物理结构:数组逻辑结构:动态数组对于使用者来说,可以自动扩容,自动记录有效元素的个数…测试:定义数组存放对象,添加对象前会检查数组长度是否足够,若不够,则会对数组进行扩容处理。定义一个MyArrayList类写主要方法。MyArrayList我们自己设计的一种数据结构,一种逻辑结构,当别人用我这个MyArrayList的对象时,就是一个容器对象。可以用来装对象。public class MyArrayList { //为什么使用Object,因为只是说这个容器是用来装对象

2020-07-08 14:21:41 748

原创 JDK1.8之后的新的日期时间API

旧的问题:(1)偏移性(2)对象的可变性问题大多数程序员认为,一个日期时间的对象,应该对应一个日期时间的点,不应该变化,如果想要代表另一个日期时间点,应该用另一个对象来表示。即对象日期时间对象的修改,应该产生新对象,而不是修改原来的对象。新版的日期时间对象,不可变,一旦修改会返回新对象。不可变对象:String、包装类对象,修改就会新对象(3)格式化:旧版只支持Date(4)旧版日期时间API:它们也不是线程安全的,不能处理闰秒新版的日期时间API对旧版有补充。1、基本类型

2020-07-08 09:48:19 373

原创 String,StringBuffer,StringBuilder的效率

Runtime:JVM运行时环境Runtime是一个单例的实现public class TestTime { public static void main(String[] args) {// testStringBuilder(); testStringBuffer();// testString(); } public static void testString(){ long start = System.currentTimeMillis(); String s.

2020-07-07 13:23:47 138

原创 可变字符序列:StringBuffer和StringBuilder常用方法

字符串的兄弟类:String:不可变对象。一旦修改就会有新对象。引入:可变字符序列,StringBuffer和StringBuilderStringBuilder默认的char[]长度为16; 不够了,扩容为原来的2倍+2StringBuffer和StringBuilder:StringBuffer线程安全的StringBuilder线程不安全的,JDK1.5引入方法:(1)append(xx):拼接,连接@Test public void test1(){ St.

2020-07-07 13:02:21 217

原创 String类常用方法系列九:拆分

String[] split(xx) 根据给定的正则表达式的匹配来拆分此字符串。形成一个新的String数组。可按照字符及空格拆分@Test public void test1(){ String str = "Hello World java"; String[] all = str.split(" "); for (int i = 0; i < all.length; i++) { System.out.println(all[i]); } }也可以按照正则表

2020-07-07 11:56:55 1528

原创 String类常用方法系列八:替换

(1)String replace(target, value)替换指定字符@Test public void test1(){ String str = "中国共产党是执政党,中国共产党是领导党"; str = str.replace("共产党", "***"); System.out.println(str); }(2)String replaceAll(String regex, String replacement)将某个内容全部替换成指定内容@Test public

2020-07-07 11:23:16 3234

原创 String类常用方法系列七:匹配规则

boolean matches(正则表达式)正则表达式:用于检测文本的格式校验某个字符串是否符合xx规则例如:电话号码 甚至可以校验是否是移动号... 银行卡号 邮箱格式 ....@Test public void test1(){ String str = "123456789"; //判断它是否全部由数字组成,并且第1位不能是0,长度为9位 //第一位不能是0,那么数字[1-9] //接下来8位的数字,那么[0-9]{8}+ bo.

2020-07-07 11:21:57 390

原创 String类常用方法系列六:截取

(1)String substring(int beginIndex):从字符串的[beginIndex]截取到最后@Test public void test03(){ String fileName = "Hello.java.txt"; //文件的后缀名是什么 //截取文件的后缀名 //(1)第一步,找到最后一个.的位置 int index = fileName.lastIndexOf("."); //(2)截取 String sub = fileName.subst

2020-07-07 11:20:05 455

原创 String类常用方法系列五:和查找有关

(1)是否包含 boolean contanis@Test public void test01(){ String str = "123.45"; if(str.contains(".")){ System.out.println("是小数"); } }(2)int indexOf(xx):如果存在返回下标,如果不存在返回-1@Test public void test02(){ String str = "123.45";// String str =

2020-07-07 11:18:26 119

原创 String类常用方法系列四:startsWith和endsWith

(1)boolean startsWith(xx)测试此字符串是否以指定的前缀开始。返回一个布尔值@Test public void test1(){ String name = "张三"; if(name.startsWith("张")){ System.out.println("张家人"); }else{ System.out.println("不是张家人"); } }@Test public void test2(){ String str = "张三是张

2020-07-07 11:16:50 421

原创 String类常用方法系列三:和byte相关,或者说和编码与解码相关

(1)byte[] getBytes():编码的方法,使用平台默认的字符编码进行编的byte[] getBytes(编码方式):编码:对于ASCII码范围内(0~127),无论用什么编码方式,结果都是一样的,一个字符对应一个字节的编码值 对于其他的字符,编码,结果不一定是几个字节,例如汉字: UTF-8:变长的,但是大多数汉字都是3个字节 GBK、GB2312:固定2个字节 ISO8859-1:不支持中文,所有字符都变为1个字节@Test publi

2020-07-07 11:14:55 160

原创 String类常用方法系列二:和char相关

(1)char[] toCharArray()语法 :字符串名.toCharArray();  返回值为 char 数组类型。将字符串变成一个字符数组@Test public void test01(){ String str = "HelloWorld"; //统计大写字母的个数 char[] arr = str.toCharArray(); int count = 0; for (int i = 0; i < arr.length; i++) { if(arr

2020-07-07 11:11:33 139

原创 String类常用方法方法系列一

(1)int length():返回字符串的长度,返回的是字符的个数因为String的内部(JDK1.9之前)用char[]实现,这个长度就是value数组的长度(2)boolean isEmpty():是否是空字符串(3)String toLowerCase()String toUpperCase()改变大小写@Test public void test1(){ String str = "hello"; System.out.println(str.toUpperCase(

2020-07-07 11:09:29 96

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除