天天看点

[个人笔记] Javajava不允许重载操作符初始化和清理字符串类型信息数组java容器I/O系统多线程编程数字和日期:集合properties类

java不允许重载操作符

初始化和清理

finalize()方法:

在一个对象生命结束之前会调用这个函数,可以用来检查一些操作,如是否满足终结条件,尽量别用
           

字符串

string对象是不可变的,可以加任意多引用

字符串相加的时候内部调用了stringbuilder stringbuilder内部有一个append函数来实现

StringBuilder res=new StringBuilder("[");
for(int i=0;i<25;i++){
	res.append(rand.nextInt(100));
	res.append("]");​​
}​
eturn res.toString()​
           

对一个对象直接输出this,会调用他的tostring函数,要输出这个对象所在的地址的话需要使用Object.toString;也就是需要调用super.toString

String对象的一些基本方法

[个人笔记] Javajava不允许重载操作符初始化和清理字符串类型信息数组java容器I/O系统多线程编程数字和日期:集合properties类

格式化的输出

printf()

System.out.printf("saew [%d %f]ds ",x,y)
           

format():可以用于PrintStream和PrintWriter对象

System.out.format("saew [%d %f]ds ",x,y)
           

println()

System.out.println("saew ["+x+y+ "]ds ")
           

Formatter类

可以看做是一个翻译器,将格式化字符串和数据翻译成需要的结果,创建Formatter对象的时候,需要向其构造其船体一些信息,告诉他最终的结果将向哪里输出

Formatter f=new Formatter(System.out);​
           

Formatter转换

[个人笔记] Javajava不允许重载操作符初始化和清理字符串类型信息数组java容器I/O系统多线程编程数字和日期:集合properties类
%h对于小数依然可以输出一个十六进制码
           

格式化说明符

%[argument_index$][flags][width][.precision]conversion
           

默认情况下数据是右对齐,可以通过“-”来改变对其方向

width指出域的最小尺寸,presion指明最大尺寸,presion用在String的时候表示的是打印出的String输出字符的最大数量,浮点数的时候表示小数位数(默认6位)

小题

[个人笔记] Javajava不允许重载操作符初始化和清理字符串类型信息数组java容器I/O系统多线程编程数字和日期:集合properties类

格式化字符可以拆分开:

int a =3; printf("%"+a+“d”,value);

String.format()函数:格式化生成String对象

正则表达式

java中的反斜线处理和其他语言中的正则表达式不一样,对于\,其他语言中表达的是一个普通的\,但是对于java中他表示的是正则表达式的\,也就是说,在java中表示一个普通的反斜线,应该要写\\,不过对于换行和制表符只需要使用单反斜线:\n,\t

要表示一个或者多个之前的表达式,需要使用+:例子:-?\d+ (-?表示可能有-号)

正则表达式的使用

最简单途径,使用Strign类内建的功能,matches函数 :"-1234".matched("-?\d+") (return true)

非常有用的自带正则表达式工具–split()方法:将字符串从正则表达式匹配的地方切开

split切割会把分割的标志去掉,比如\W分割,会按照非字符对String进行分割,在分割的时候会把这个非字符也给去除掉

split函数还有一个重载的版本,允许限制字符串分割的次数

字符串替换,替换第一个匹配的子串或者替换所有能够匹配的地方 replaceFirst(),replaceAll()

部分常用的表达式 可以参考jdk中 java.util.regex.Pattern

[个人笔记] Javajava不允许重载操作符初始化和清理字符串类型信息数组java容器I/O系统多线程编程数字和日期:集合properties类

Pattern和Matcher

需要导入java.util.regex包,用static Pattern.Compile()方法来编译正则表达式,他会根据输入的String类型的正则表达式生成一个Pattern对象,之后可以调用他的matcher()方法,生成一个Matcher对象,用replaceall()对所有的匹配进行替换

[个人笔记] Javajava不允许重载操作符初始化和清理字符串类型信息数组java容器I/O系统多线程编程数字和日期:集合properties类

这个类的split方法

String[] pattern.compile("!!").split(input,int num); do the first num ​​
           

替换操作

replaceall();replacefirst();
appendReplacement(String Buffer sbuf,String replacement) 渐进式替换
appendtail(stringbuffer sbuf)在执行了一次或者多次appendreplacement之后用这个方法把输入字符串余下的部分复制到sbuf中
           

matcher对象reset操作,将原来的matcher对象应用于一个新的字符序列

读入数据

input.readline();需要用split进行分解

Scanner类

[个人笔记] Javajava不允许重载操作符初始化和清理字符串类型信息数组java容器I/O系统多线程编程数字和日期:集合properties类

可以通过useDelimiter()函数来设定定界符

类型信息

多派生中获取某一个特定的类

使用Class.forName()方法创建一个对象的引用的时候会自动初始化这个class对象

使用.class来创建对象的引用的时候 不会自动初始化该Class对象

他的初始化是在对静态方法(构造器隐式是静态的)或者是非常数静态域进行首次引用的时候才初始化

static final 是一个编译器的常量 这个值不需要对类进行初始化就可以被读取到,但是如果只是其中之一的修饰,那么就不足以确保这种行为

数组

数组的复制函数System.arrycopy(源数组,开始位置,目的数组,开始位置,复制的元素个数) 他的比较是基于内容的

另外Arrays类下面还有一些比较实用的方法:sort,fill(可以设置填充的位置,但是只能够填充一个值),equals(判断两个数组是否相等),binarySearch(有序数组中对目标元素的查找) 返回第一个大于查找对象的元素在数组中的位置

自定义的类要实现排序功能的话需要实现comparable接口,实现compareTo方法,

java容器

List

ArrayList:长于随机访问元素,但是在list的中间插入和移动元素是比较慢

LinkedList:较低代价进行插入和删除,随机访问能力较差,特性集比ArrayList大

Linkedlist添加了可以让他用作栈,队列或者双端队列的方法

fetFirst和element():返回列表第一个元素并且不移除他,如果是空,就抛出Nosuchelementexception 对比:peek()在空的时候返回的是null;

removefirst和remove 删除并返回列表的头 空的时候返回异常,poll函数在空的时候回返回null

addFirst,add(),addLast :如函数名

removeLast 移除最后一个元素

Stack

可以直接用泛型类内部套LinkedList来进行实现,

直接用java.util.Stack

Set

TreeSet 将元素存储在红黑树数据结构中

HashSet

LinkedHashSet 是用了链表来维护元素的插入顺序

如果要对结果进行排序,一种方式就是使用treeset来代替hashset

SortedSet<Integer> intset=new TreeSet<nteger>()​
           

Queue

LinkedList提供了方法支持队列的行为,实现了queue接口,所以linkedlist可以用作queue的一种实现,可以像linkedList向上转型为queue

Queue =new LinkedList()

offer()添加元素 peek,element不移除返回队头 poll和remove移除并返回队头

PriorityQueue 优先队列

Map

使用

Map<Integer,Integer> m=new HashMap<Integer,Integer>()
put,get方法
containsKey(),containsValue()方法 kesSet(),values()
           

迭代器Iterator

ListIterator是一个更强大的Iterator的子类型,可以用作各类List的访问他,可以双向移动

可以用listIterator()创建一个指向list开始处的迭代器,也可以用listIterator(n)来创建一个指向列表索引为n的元素处的ListIterator

hasPrevious函数,it.previous访问像一个

I/O系统

File类

目录列表器

File path=new File(".");list=path.list()返回列表; or list=path.list(new FilenameFilter()) 参数为实现了这个接口的一个类,对文件进行过滤

输入输出

inputstream 用来表示从不同数据源(自解数组,string对象,文件,pipe,一个由其他是种类的流组成的序列,其他的数据源,如internet连接等)产生输入的类

从文件进行读入

[个人笔记] Javajava不允许重载操作符初始化和清理字符串类型信息数组java容器I/O系统多线程编程数字和日期:集合properties类

多线程编程

线程驱动任务

一种描述任务的方式,可以用Runnable接口来提供。要定义任务就要实现Runnable接口并编写run()方法,使得这个任务可以执行你的命令

线程的协调

wait,notify,notifyAll
           

数字和日期:

数字的解析

Integer.parseInt(String)  Float.parseFloat(String)
           

数字的格式化

java.text.NumberFormat(这个是一个抽象类)
    java.text.DecimalFormat(具体实现,使用的时候不能直接new,需要调用NumberFormat的静态方法getInsance返回)
    | 例子:NumberFormat nf=NumberFormat. getInstance(Locale.US) 
    | print(nf.format(123456))​​
           

集合

对象的比较和排序

java. lang. Comparable / Java. lang. Comparator接口

arrays. sort和服务对象之间有协议(comparable接口),因此对象需要实现这个接口的compareTo函数

arrays. sort(arr,实现了conpareto接口的类) ,或者arr中元素实现了comparable接口

properties类

主要用于读取java的配置文件