Java基础知识总结一

1.集合框架总结


集合体系

Collection(单列)

List(有序,可重复)

ArrayList: 底层数据结构是数组,查询快,增删慢。线程不同步,效率高。


LinkedList:底层数据结构是链表,查询慢,增删快。线程不同步,效率高。


Vector: 底层数据结构是数组,查询快,增删慢。线程同步,效率低。

Set(无序,唯一)

HashSet:底层数据结构是哈希表。线程不同步,效率高。 怎么保证唯一性的呢?它依赖两个方法:hashCode()和equals()顺序:首先判断hashCode()值是否相同。同:继续走equals(),看返回值如果true:就不添加到集合。如果false:就添加到集合。不同:就添加到集合。

TreeSet:底层数据结构是二叉树。 线程不同步,效率高。 怎么保证唯一性的呢?是根据返回是否是0。

怎么保证排序的呢?两种方式

一、自然排序(元素具备比较性) 实现Comparable接口

二、比较器排序(集合具备比较性) 实现Comparator接口

Map(双列 底层结构是针对键有效,跟值无关)

HashMap:底层数据结构是哈希表。线程不同步,效率高。

怎么保证唯一性的呢?

它依赖两个方法:hashCode()和equals()顺序:首先判断hashCode()值是否相同。同:继续走equals(),看返回值如果true:就不添加到集合。如果false:就添加到集合。不同:就添加到集合。


Hashtable:底层数据结构是哈希表。线程安全,效率低。

怎么保证唯一性的呢?

它依赖两个方法:hashCode()和equals()顺序:首先判断hashCode()值是否相同。同:继续走equals(),看返回值如果true:就不添加到集合。如果false:就添加到集合。不同:就添加到集合。


TreeMap:底层数据结构是二叉树。线程不同步,效率高。

怎么保证唯一性的呢?是根据返回是否是0。

怎么保证排序的呢?两种方式自然排序(元素具备比较性)实现Comparable接口比较器排序(集合具备比较性)实现Comparator接口

集合常见应用功能

添加功能,判断功能,删除功能,获取功能,长度功能

遍历方式
List Set迭代器

Iterator

ListIterator

Map迭代器

有俩种选择一种去用即可。

(妻子找丈夫)键和值

(结婚证找妻子丈夫)键和值映射关系

Map的两种典型遍历方式:

entrySet() 与 keySet()。entrySet的遍历方式要比keySet()高许多,因为欲取得同样的key-value对,keySet()相当于遍历了两次Map


集合那么多什么时候该用谁?

是否键值对?

是:Map

是否对键排序?

是:TreeMap

否:HashMap

不懂的情况下,使用HashMap。

否:Collection

是否唯一?

是:Set

是否对元素进行排序?

是:TreeSet

是否需要有序?

是:LinkedSet

否:HashSet

不懂的情况下,使用HashSet

否:List

是否要安全?

是:Vector(真正开发中也不用)

否:ArrayListLinkedList

注意:查询多:ArrayList

增删多:LinkedList

不懂的情况下,使用ArrayList


2.IO流


最痛苦的就是流对象有很多,不知道该用那一个。

     通过明确来完成。

(1)、明确源和目的

源:输入流InputStream Reader

目的:输出流OutputStream Writer

(2)、操作的数据是否是纯文本

是:字符流 Reader Writer

不是:字节流 InputStream OutputStream

(3)、当体系明确后,再明确要使用那个具体的对象

通过设备来进行区分:

源设备:内存 硬盘 键盘

目的设备:内存 硬盘 控制台


需求:将一个文本文件中数据存储到另一个文件中。复制文件


源:因为是源,所以使用读取流。InputStream Reader

是否是纯文本文件:是,所以使用 Reader。

接下来明确要使用该体系中的那个对象:

明确设备,硬盘,一个文件。

Reader体系中可以操作文件的是,FileReader。

是否需要提高效率?

BufferedReader

目的:因为是目的,所以使用写入流。OutputStream Writer

是否是纯文本文件:是,所以使用 Writer。

接下来明确要使用该体系中的那个对象:

明确目的,硬盘,一个文件。

Writer 体系中可以操作文件的是,FileWriter。

是否需要提高效率?需要。BufferedWriter

扩展

想要把录入的数据按照指定的编码表(UTF-8),将数据存到文件中,使用转换流,里面可以指定编码。

目的:OutputStream Writer

是否是纯文本?是,Writer

接下来明确要使用该体系中的那个对象:

明确目的,硬盘,一个文件。

Writer  体系中可以操作文件的是, FileWriter。

但是存储时,需要加入指定的编码表,而指定的编码表,只有转换流可以指定。

所以要使用的对象是OutputStreamWriter.

而该转换流对象要接收一个字节输出流。

而且还可以操作文件的字节输出流,FileOutputStream

是否需要提高效率?需要。BufferedWriter

所以,记住,转化暖流什么时候使用,字符和字节之间的桥梁,通常,涉及到字符编码转换时,需要用到转换流。


3.网络编程

网络编程-UDP-TCP)

UDP 特点:(面向无连接)(聊天)

1、将数据及源和目的封装成数据包中,不需要建立连接。(封包,无连接)
2、每个数据包的大小限制在64k内。(小数据)
3、因无连接,是不可靠协议。(不可靠,丢数据)
4、不需要建立连接,速度快。(速度快)

TCP 特点:(面向连接)(下载)

1、建立连接,形成传输数据的通道。(传输,连接)
2、在连接中进行大数据量传输。(大数据)
3、通过三次捂手完成连接,是可靠协议。(可靠。在? 我在!我知道你在了)
4、必须建立连接,效率会稍低。(速度慢)

(网络编程-Socket)(Socket也称套接字)

1、Socket就是为网络服务提供的一种机制。
2、通信的两端都有Socket。
3、网络通信其实就是Socket间的通信。
4、数据在两个Socket间通过IO传输。

注意:Socket可以理解为码头,有码头才有船可以对货(数据)进行装卸(读写)。

但是由于船运输的方式不同,所以有了不同的服务方式。

一个是UDP,另外一个是TCP。

练习:建立一个文本转换服务器

* 客户端给服务端发送一个文本文件,服务端会将文本转成
* 大写在返回给客户端
* 而且客户端可以不断的进行文本转换,当客户端输入over时

思路:
* 客户端
* 既然是操作设备上的数据,那么就可以使用IO技术,并按照
* IO的操作规律来思考,
* 源:键盘录入
* 目的:网络设备,网络输出流
* 而且操作的是文本数据,可以选择字符流。
* 步骤:
* 1.建立服务
* 2.获取键盘录入
* 3.将数据发给服务端
* 4.服务端返回大写数据
* 5.关闭资源

public static void main(String[] args) throws Exception {
Socket s=new  Socket();
// 定义读取键盘数据的流对象
BufferedReader bufr=new 
BufferedReader(new InputStreamReader(System.in));
// 定义目的,将数据写入到socket输出流。发给服务端
/*BufferedWriter  bufout=new 
BufferedWriter(new OutputStreamWriter(s.getOutputStream()));*/
// 定义一个socket读取流,读取服务端返回的大写信息
BufferedReader   bufin=new 
BufferedReader(new InputStreamReader(s.getInputStream()));

PrintWriter  out=new PrintWriter(s.getOutputStream(),true);
String line=null;
while ((line=bufr.readLine())!=null) {

if ("over".equals(line)) {
break;  
}
out.println(line);
/*bufout.write(line);
bufout.newLine();
bufout.flush();*/
String str=bufin.readLine();
System.out.println("servce:"+str);

}
bufr.close();
s.close();
}


}

服务端
*源:socket读取流
*目的:socket输入流

public static void main(String[] args) throws Exception {
ServerSocket  ss=new ServerSocket(10005);
Socket s=ss.accept();
// 读取socket读取流中的数据
BufferedReader bufin=new 
BufferedReader(new InputStreamReader(s.getInputStream()));
// 目的。socket输出流。将大写数据写入到socket输出流,并发送给客户端
BufferedWriter bufout=new 
BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line=null;
while ((line=bufin.readLine())!=null){
System.out.println(line);
bufout.write(line.toUpperCase());
bufout.newLine();
bufout.flush();
}
s.close();
ss.close();
}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值