Java学习中注解与多线程,网络编程与XML技术,集合框架等

程序猿欧文 2020-11-09 15:20:12
java 学习 多线程 注解 中注


本部分内容主要有集合框架及泛型,实用类,输入和输出处理,注解与多线程,网络编程与

 

一、集合框架及泛型

1、集合框架

是一套性能优良、使用方便的接口和类(位于java.util包中)解决数组在存储上不能很好适应元素数量动态变化,查找效率低的缺陷

集合接口: Map、Collection(子接口List、Set) 、 Iterator

接口实现类:HashMap  TreeMap 、ArrayList  LinkedList、 HashSet  TreeSet  实现map、list、set接口

集合工具类:Arrays 、Collections  提供对集合元素进行操作的算法

2、接口的区别

Collection 接口存储一组可重复,无序的对象(包括List  Set接口)

通用方法:clear() 清除元素    isEmpty()判断集合是否为空

iterator() 获得集合的迭代器  toArray()集合转换为数组

List 接口存储一组可重复,有序的对象

Set 接口存储一组唯一,无序的对象

Map接口存储一组键值对象,键是唯一的,Map和Set很像

3、题外话:

    如果在学习过程中遇到任何问题,可以看下我的公告栏,小编在线解答,助你起飞,还有我这段时间整理的一些Java学习手册,面试题,开发工具,PDF文档书籍教程,需要的话都可以免费分享!

4、接口实现类

  • ArrayList:在内存中分配连续的空间。根据下标遍历元素和随机访问元素的效率比较高,而增加和删除由于位置移动操作很慢

常用方法: add(Objiect o)在列表末尾顺序添加元素

            get(int index) 返回指定索引位置处的元素

            size() 返回列表中的元素个数

            contains(Objiect o) 判断列表中是否存在指定元素

            remove(Objiect o) 删除列表中的元素

  • LinkedList:采用链表存储方式。所有顺序查找的时候很慢,而插入、删除元素时无需移动位置,效率比较高

常用方法:addFirst(Objiect 0)在列表首部添加元素

           addLast(Objiect 0)在列表尾部添加元素

           getFirst()获得当前集合的第一个元素

           getLast()获得当前集合的最后一个元素

           removeFirst() 删除并返回列表中的第一个元素

           removeFirst()删除并返回列表中的最后一个元素

  • TreeSet|TreeMap比较:底层是二叉树结构;

TreeMap、TreeSet都保存了对象的排列次序;

TreeSet只存储一个对象,而TreeMap存储两个对象Key和Value;

存储速度比Hash集合慢。

  • HashSet|HashMap比较:底层数据结构为哈希表;

HashMap存储键值对,键唯一,而HashSet仅仅存储对象,对象唯一;

HashMap使用唯一的键来获取对象,速度相对较快。

  • HashSet集合方法:

add(Objiect o)  添加对象

size()    返回元素个数

contains(Objiect o) 判断是否存在

remove(Objiect o) 移除有关对象

  • HashMap集合方法:

        put(key,value)添加键值对

        get(key)         获取与key有关的值

        remove(key) 移除与key有关的映射,并返回旧值

        containsKey( ) containsValue( )判断是否存在key value

                size()返回元素个数

 keySet()获取所有key的集合

 values()获取所有values的集合

5、集合遍历

三种方法:普通for循环  增强for循环  Iterator迭代器遍历

1.for (Object object : list) { System.out.println(object); }

2.for (int i = 0 ;i<list.size();i++) { int j= (Integer) list.get(i);  System.out.println(j); }

3.Iterator iterator = list.iterator();while(iterator.hasNext()){

int i = (Integer) iterator.next();  System.out.println(i); }

Iterator方法:

HasNext()判断是否存在下一个可访问的元素,如果可以,返回true

Next() 返回要访问的下一个元素

6、Collections工具类

作用:实现对元素的排序、查找和替换操作

如果要比较一个类的对象之间的大小,必须要实现Comparable接口。

Comparable接口:对实现它的每个类的对象进行自然排序。

comparableTo(Object obj)方法:用于比较此对象与指定对象的顺序

返回值:0等于、1大于、-1小于指定对象obj

方法:

fill( ) 替换集合中所有元素为相同元素的方法

sort( ) 对集合进行排序的方法

binarySearch( ) 对集合进行查找的方法

max( )\min( ) 查找最大值、最小值

7、泛型集合

  • 泛型即参数化类型,通过指定集合中的元素类型来实现约束

作用:将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性

举例:List<Integer> list=new ArrayList<Integer>( );

ArrayList<Student> students = new ArrayList<Student>();

  •   典型的泛型集合:ArrayList<E>、HashMap<K,V>

泛型类: public class User<T>{}

泛型接口:public interface Pair<T>{}

泛型方法: public <T> void getMiddle(T[] b) {}  注意<T>的位置

在泛型中,基本类型是不可以做泛型参数,只能使用包装类、引用数据类型。

 

二、实用类

1、基本概念

Java API:Java应用程序的编程接口、Java帮助文档

实用类:   由Java API提供的常用类

学习这部分一定要多看 Java API 。Java帮助文档提供的常用包如下:

lang包:包含基础类和接口  如 Comparable接口 、包装类、  String、Math类

Util包:包含系统辅助类 如 Collection、Map接口、 Date、Arrays类

Io包:   与输入输出有关类 如 Serializable接口、File、Reader、Writer类

Net包:与网络有关类  如CookieStore接口 、Socket、URL、ServerSocket类

Sql包: 与数据库有关类  如 Statement接口、DriverManager、DriverPropertyInfo类

2、枚举

指由一组固定的常量组成的类型。使用enum关键字定义

举例:定义:public enum Genders{男,女} 调用:Genders.男

作用:类型安全、易于输入、代码清新

3、包装类

概念:把基本数据类型包装为对象,方便对象的操作,体现了java面向对象的特点。 ag:int→Integer char→Character  byte→Byte

包装类作用:

  • 方便在各种类型之间的转化  如:int类型和String类型互相转换

  • 提供了基本数据类型的相关属性与方法 如:最小值、toString() 、valueOf()、equals()方法

常用方法:

toString():将基本数据类型转换为字符串类型

valueOf():静态的重载方法 将基本数据类型、字符串转换为包装类

parseInt()、parseBoolean():把字符串转换为相应基本数据类型

4、类型转换

  • 基本类型转包装类:Integer i=5;或 Integer i=new Integer(5);或Integer i=new Integer(“5”);或Integer i=Integer.valueOf(“5”);

注意:除Character包装类外,都可以将字符串作为参数来构造实例

  • 包装类转基本类型:int intId=id.intvalue();或int intId=id;

  • 自动转换: Integer i=5;//装箱 基本→包装     int j=i;//拆箱 包装→基本

jdk 1.5以后,基本类型和包装类的转换,编译器会自动完成

5、String类

  • 在Java中,字符串常被作为String类型的对象来处理。

  • 创建String对象方法:

String a=”hello”或String a = new String(“hello”);

注意:第2个方法 ,创建了两个对象:一个”hello”字符串对象,在堆内存中;一个s对象,在栈内存中。

  • 常用方法:

判断:    equals():判断两个字符串的内容是否相同

equalsIgnoreCase():判断两个字符串的内容是否相同,不区分大小写

contains(String s):判断一个字符串中是否包含另一个字符串

endsWith(String s):测试此字符串是否以指定的后缀结束

startsWith(String s):测试此字符串是否以指定的前缀开始

isEmpty():测试字符串是否为空

获取:    int length():返回此字符串的长度

char charAt(int index):返回指定索引处的char值(字符)

int indexOf():返回指定字符(串)在此字符串中第一次出现处的索引

int lastIndexOf(int c):返回指定字符在此字符串中最后一次出现的索引

String substring(int beginIndex, int endIndex)返回一个新字符串,它是此字符串的一个子字符串,包含头不包含尾。

转换:    byte[] getBytes():从字符串到字节数组的方法

char[] toCharArray():从字符串到字符数组的方法

String valueOf(数据类型):把该数据类型的数据转换成字符串

String toLowerCase():把字符串转换成小写

String toUpperCase():把字符串转换成大写

String concat(String str):将指定字符串连接到此字符串的结尾

替换分割: String replace(char oldChar, char newChar):用新字符替换旧字符

String[] split(String regex):根据指定的字符串把一个字符串分割成一个字符串数组

    String trim():去除字符串的前后空格

    int compareTo(String anotherString)按字典顺序比较两个字符串

    int compareToIgnoreCase(String str)按字典顺序比较两个字符串,不考虑大小写

6、StringBuffer

  • 相当于给字符串一个缓冲区,是String的增强类。对字符串频繁修改(如字符串连接)时,使用StringBuffer类可以大大提高程序执行效率。

  • StringBuffer声明

StringBuffer strb = new StringBuffer();

StringBuffer strb = new StringBuffer(“aaa”);

  • 常用方法:

增加:append(“**”):追加各种类型的数据到字符串之后

insert (1, “**”): 在容器指定位置插入各种类型的数据

删除:deleteCharAt() : 删除指定位置的字符

    delete(): 清空StringBuffer的缓冲区

替换:replace():用新字符替换旧字符

    toString():将StringBuffer类型的字符串转换为String类型的对象

获取:charAt() :返回指定索引处的char值(字符串)

    length():返回此字符串的长度

  • JDK5.0后提供了StringBuilder,等价StringBuffer。但是是单线程的,效率相对较高,但是不保证线程安全。

7、Math类

提供了常用的数学运算方法和两个静态常量E(自然对数的底数)和PI(圆周率)

常用方法:

abs():返回绝对值;

max():返回最大值;

random():返回随机数

ag:生成[0,10)区间的整数 int random = (int)(Math.random()*10);

8、Random类

是产生随机数的一个类

常用方法:

  • 构造方法

Random() 创建一个新的随机数生成器。

Random(long seed) 使用单个种子创建一个新的随机数生成器。

注意:种子数只是随机算法的起源数字,和生成的随机数字的区间无关

ag:Random rand = new Random(10);

  • 成员方法

int nextInt() 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。

int nextInt(int n) 返回一个伪随机数,该值介于[0,n)的区间。

ag:生成[0,10)区间的整数     int num = rand.nextInt(10);

11、Scanner类

位于java.util包,是获取从键盘的输入数据的一个类

  • 构造方法

Scanner(InputStream source) 创建一个用来解析基本类型和字符串的文本扫描器

ag:Scanner sc = new Scanner(System.in);

  • 成员方法

hasNext() 判断扫描器中当前扫描位置后是否还存在下一段。

hasNextLine() 如果在此扫描器的输入中存在另一行,则返回 true。

nextInt() 将输入信息的下一个标记扫描为一个int,接受整型变量。

next() 以换行或空格符为分界线接收下一个String类型变量。如:输入hello world!,接收到的只是hello

nextLine() 以换行为分界线接收下一个String类型变量。如:输入hello world!,接收到的是hello word!

12、Date类

位于java.util包,表示日期和时间的类

  • 构造方法

Date() 分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。

Date(long date) 分配Date对象并初始化此对象,以表示从标准基准时间(即1970年1月1日00:00:00GMT)以来的指定毫秒数。

  • 成员方法

int compareTo(Date anotherDate) 比较两个日期的顺序

boolean equals(Object obj) 比较两个日期的相等性。

13、SimpleDateFormat类

位于java.text包,格式化和解析日期的具体类

固定写法:

//创建日期对象 Date date = new Date();

//定制日期格式 SimpleDateFormat f= new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);

String now = f.format(date);  System.out.println(now);

14、Calendar类

位于java.util包,用于设置和获取日期/时间数据的特定部分

int get(int field)       返回给定日历字段的值

YEAR  指示年     MONTH   指示月

DAY_OF_MONTH   指示一个月中的某天

DAY_OF_WEEK        指示一个星期中的某天

 

三、输入/输出和反射

 

1、File类

位于java.io包,用来操作文件目录和属性

  • 构造方法:

File(String pathname)指定文件路径

File(String dir,String subpath)dir参数指定目录路径,subpath参数指定文件名

File(File parent,String subpath)parent参数指定目录文件,subpath参数指定文件名

  • 常用方法:

创建:

boolean createNewFile( )  创建名称的空文件,不创建文件夹

boolean mkdir() 创建由该File对象表示的目录(一级文件夹)

boolean mkdirs() 创建包括父目录的目录(二级文件夹)

判断:

boolean exists( )  判断文件或目录是否存在

boolean isFile( )   判断是否是文件

boolean isDirectory( )  判断是否是目录

获取:

String getPath( )   返回此对象表示的文件的相对路径名

String getAbsolutePath( )   返回此对象表示的文件的绝对路径名

String getName( )   返回此对象表示的文件或目录的名称

String getParent()  返回此对象父目录的路径名;

long length()  返回文件的长度,单位为字节, 如果文件不存在,则返回0L

删除:

boolean delete( )   删除此对象指定的文件或目录

2、相对路径与绝对路径

相对路径:从中间目录出发,到目前位置路径。

绝对路径:从根目录出发,到目前位置的路径。

3、Java IO流

指二进制的字节序列,是一连串流动的字符,是以先进先出方式发送信息的通道

分类:

(1)按照流操作的数据类型分为:字节流和字符流。

字节流是8 位通用字节流,字符流是16位Unicode字符流

(2)按照流的流向分为:输入流,输出流(相对计算机程序而言,先入后出、先读后写)

源数据源(键盘、硬盘)→输入流(读)→程序→输出流(写)→目标数据源(控制台)

4、IO流常用基类

注意:( )里面是子类 如File**类,Buffered**类

Buffered**类带有缓冲区,有按行读取内容的readLine()方法

  • 字节流

字节输入流:InputStream    (FileInputStream、BufferedInputStream)

字节输出流:OutputStream (FileOutputStream、BufferedOutStream)

  • 字符流

字符输入流:Reader (FileReader、BufferedReader)

字符输出流:Writer  (FileWriter、BufferedWriter)

5、常用基类的方法

  • 字节输入流InputStream类方法

void close() 关闭此输入流并释放与该流关联的所有系统资源

int read() 读取一个字节数据

int read(byte[] b) 读取一定数量的字节,并将其存储数组中

int read(byte[] b, int off, int len)  将输入流中最多 len 个数据字节,保存到字节数组b中

  • 字节输出流OutputStream类方法

void close() 关闭此输出流并释放与此流有关的所有系统资源

write(int b)  写入一个字节数据

void write(byte[] b) 写入数组b的所有字节

void write(byte[] b, int off, int len)将字节数组中从偏移量 off 开始的 len 个字节写入到输出流

  • 字符输入流Reader类方法

void close() 关闭输入流

int read() 读取单个字符

int read(char[] c)  将c.length长度的字符读入数组c中

int read(char[] c, int off, int len) 将最多len长度的字符读入数组c,保存位置从off位置开始

  • 字符输出流Writer类方法

void close() 关闭输出流

void flush() 刷新输出流

int read() 读取单个字符。

int read(char[] cbuf)  将字符读入数组

int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分

6、节点流与包装流

节点流:创建对象时,参数是字符串或File类对象

包装流:创建对象时,参数是流对象。

包装的作用:1.提高效率 2.方便书写代码

7、使用字节流读写文本文件

  • 使用FileInputStream 读文本文件

//构造字节输入流对象

FileInputStream fis= new FileInputStream(“c:\\test.txt”);

//循环读取文件数据  最后关闭流对象fis.close();

System.out.println(“可读取的字节数”+fis.available());

byte []buf = new byte[1024];   int len=0;

while((len=fis.read(buf))>0){ System.out.write(buf, 0, len); }

  • 使用FileOutputStream 写文本文件

//构造字节输入流对象

FileOutputStream fos=new .........

版权声明
本文为[程序猿欧文]所创,转载请带上原文链接,感谢
https://my.oschina.net/mikeowen/blog/4710058

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云