文章目录:

  • 壹------》多线程有四种创建方式:
  • 贰------》集合:
  • 叁------》Map:
  • 肆------》 泛型:
  • 伍------》IO流分类:
  • 陆------》 IO 流 输入、输出的标准化过程:
  • 1、输入过程:
  • 2、输出过程:


壹------》多线程有四种创建方式:

继承Thread 类
实现runnable 接口
实现Callable 接口
实现runnable接口,创建 ThreadPoolExecutor 方式. 去创建线程、

具体操作步骤:
1、继承Thread类、实现runnable接口、实现Callable 接口、重写run() 方法 {在run方法内编写需要执行的逻辑}
2、创建主题子类对象进行输出。。【针对于创建和实现前两步骤】

3、线程安全问题,使用 synchronized、 同步方法、或者是同步代码块。解决线程安全问题。
4、创建子类对象,在创建 Thread 类,传入对应的变量,调用需要的方法。即可

循环使用:for 循环。
常用方法如下:
Thread.sleep(1000); 设置线程睡眠时间,进行
start(); 开启线程。
set.name 设置线程名字。
Thread.currentThread().getName() 获取线程名字。
service.shutdown(); 关闭线程池。

notify(); 唤醒一个线程
notifyAll(); 唤醒全部线程
wait(); 阻塞线程 【此方法有异常要解决】
synchronized (this){} 同步线程、 【同步的方式解决了线程安全的问题,任何一个类都是可以充当锁的】

备注:在我们实际使用中都是使用线程池的方式创建多线程。


贰------》集合:

Collection: 分为 List 和Set 两大类

List 实现下面三个接口:
ArrayList: 查询块、增删慢。 List list = new ArrayList();
LinkedList:增删慢、查询快。
vector简介:
Vector 是矢量队列,它是JDK1.0版本添加的类。继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口。
Vector 继承了AbstractList,实现了List;所以,它是一个队列,支持相关的添加、删除、修改、遍历等功能。
Vector 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在Vector中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。
Vector 实现了Cloneable接口,即实现clone()函数。它能被克隆。
和ArrayList不同,Vector中的操作是线程安全的。

// 數組–>集合
List List = Arrays.asList(“AA”, “NN”, “CC”, “BB”);

Collection 常用方法的测试
1、add:向集合中添加元素
2、contains:判断当前集合中是否包含obj
3、remove:移除集合中的某个元素
4、romveAll:从当前集合中移除coll中所有得元素.
5、equals(Object obj) :要返回true,,需要當前集合和形參集合的元素相同.
6、equals 的使用(Obj obj) 比较内容值
7、hashcode() :返回當前對象的哈希值 {hashcode、equals 这两个方法进行重写需要}

Set 实现下面三个接口:
HashSet:实现了LinkedHashSet
LinkedHashSet:继承了HashSet
TreeSet:继承了Set

循环使用:在集合中是通用的、
1、创建Iterator对象。

Iterator iterator = list.iterator();
 while (iterator.hasNext()){
 System.out.println(iterator.next());
 }
 2、for循环
 // for(元素的数据类型 局部变量: 数组对象)
 for(int i:arr){
 System.out.println(“当前数据是:”+i);
 }
 }


3、在List 中可以使用普通的for 循环。进行输出变量value 值。
备注:我们在项目中一般使用ArrayList 较多,重点掌握。


叁------》Map:

Map 双列数据,存储key–value 对的数据,
HashMap:作为Map的主要实现类:线程不安全的,效率高,存储null的Key 和value
LinkedInHashMap:保证在遍历Map元素时,可以按照添加顺序实现遍历
TreeMap:保证按照添加的key–value对进行排序,实现排序遍历
Hashtable:作为古老的实现类:线程安全的,效率低;不能存储null的Key 和value
properties:常用来处理配置文件,key 和value 都是String类型。。

Map 常用方法:
Map map = new HashMap();
map.put(“AA”,123);
putALL(Map m):将m中的所有key—value 对存放到当前map中
map.remove 移除
map.clear()清空操作

遍历常用方法:

添加: put(Object key Object values )
删除:remove
修改:put(Object key )
查询:get
长度:size()
插入:keySet() / values() / entryset()

循环使用:while 循环。

Collection 和 Collections的区别?
1.Collection:
是集合类的上层接口。本身是一个Interface,里面包含了一些集合的基本操作。
Collection接口时Set接口和List接口的父接口
2.Collections
Collections是一个集合框架的帮助类,里面包含一些对集合的排序,搜索以及序列化的操作。
最根本的是Collections是一个类,
Collections 是一个包装类,Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,
而另一些则不允许,一些 collection 是有序的,而另一些则是无序的。


肆------》 泛型:

简单理解就是指定一种数据类型,不能修改。

// 遍历所有Map 中的Key 和 value
@Test
public  void  test2(){
	Map<String,Integer> st = new HashMap<String, Integer>();
		st.put("苹果",001);
		st.put("荣耀",002);
		st.put("华为",003);
		st.put("小米",004);
		st.put("vivo",005);
		st.put("oppo",006);
	Set<Map.Entry<String, Integer>> entries = st.entrySet();
	// 遍历所有集合
// Iterator<Map.Entry<String, Integer>> iterator = entries.iterator();
 // while (iterator.hasNext()){
 // System.out.println(iterator.next());
 // }
// 增强for 循环使用。
	for (Object s :entries){
		System.out.println(s);
	}
伍------》IO流分类:
IO 流是基于文件夹的:
 // 绝对路径
 File file = new File(“D:\he.txt”);boolean mkdir = file.mkdir();
 if (mkdir) {
 System.out.println(“创建成功”);
 }else if (file.exists()){
 System.out.println(“就要删除” +file.delete());
 }
 }

javaIO 原理:(我们站在程序员的角度去理解)

  • input 输入:读取外部数据(磁盘、光盘等设备的数据) 到程序中
  • output 输出:将程序(内存)数据输出到磁盘 、光盘等设备。

说明流的三种分类:
流向:输入流、输出流
数据单位:字节流、字符流
流的角色:处理流、缓冲流

写出四个IO流中的抽象基类、四个文件流、 四个缓冲流

InputStream、 FileInputStream BUfferedinputStream
 outputStream、 FileoutputStream BUfferedOutputStream
 Read FileRead BufferedFileRead
 Write FileWrite BufferedFileWrite

Java IO 流的作用:
1、用于处理设备上的数据。
2、设备:硬盘,内存,键盘录入。

字节流和字符流的区别:
(1)字节流读取的时候,读到一个字节就返回一个字节。

字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8码表中是3个字节)时,先去查指定的编码表,将查到的字符返回。
(2)字节流可以处理所有类型数据,如MP3,图片,avi。而字符流只能处理字符数据。

结论:只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都要用字节流。

IO的体系,所具备的基本功能就有两个:读和写。
字节流:InputStream(读),OutputStream(写)。
字符流:Reader(读),Writer(写)。

缓冲流的作用:提供流的读取、写入速度。

字节流主要是操作byte类型数据,以byte数组为准,主要操作类就是OutputStream、InputStream
字符流主要是操作char类型数据,以char数组为准,主要操作类就是FileRead、FileWrite char[] chf = new char[5];

陆------》 IO 流 输入、输出的标准化过程:
1、输入过程:

①:创建File 类的对象,指明读取的数据来源。(要求此文件一定存在)

②:创建相应的输入流,将File类的对象作为参数,传入流的构造器中。(表明我们创建的这个构造器就是来操作此文件的)

③:具体的读入过程:
1、创建相应的baty[] 或 char[] 型数组。
2、 while 循环 编写具体的逻辑。

④: 关闭流资源。 按下Ctrl+Alt+t 进行补货异常。 try-catch -finaly

2、输出过程:

①:创建File 类的对象,指明读取的数据来源。(不要求此文件一定存在)

②:创建相应的输出流,将File类的对象作为参数,传入流的构造器中。

③:具体的读出过程:
1、创建相应的byte[] 或 char[] 型数组。
2、 while 循环 编写具体的逻辑。

数据的读入和写入操作
 char[] chf = new char[5];
 int len;
 while ((len=fileR.read(chf)) !=-1){
 // 每次写出len 个字符
 fileW.write(chf,0,len);
 }

④: 关闭流资源。 按下Ctrl+Alt+t 进行补货异常。 try-catch -finaly

iOS 数组多线程crash io 多线程 集合_List