一、群聊聊天室
1.1 聊天室案例四
群聊业务:将当前多个客户端向服务器端发送消息以后,可以让所有客户端发送的消息不光在服务器端有显示,也可以让这些消息在不同的客户端中都显示。
1.客户端需要有读取服务端发送数据的功能,需要在原有输出流的基础上,再拥有输入流进行读取服务器端发送数据。
2.服务器端需要有向客户端写出数据的功能,需要在原有输入流的基础上,再拥有输出流进行向客户端发送数据。
实现步骤:
-
在服务器端定义输出流类型的数组对象,用于保存各个客户端发送的数据的输出流对象
-
服务器之前只是拥有输入流对象,用于读取客户端发送过来的数据消息,现在需要将服务器端接收到客户端发送的数据再依次发送给每个客户端实现群聊效果,所以,需要在服务器端中添加输出流,并将这个输出流对象保存到上一步定义的数组中
-
客户端之前只是拥有输出流对象,用于向服务器端写出相关数据,但是通过图示和步骤二,客户端也需要进行读取服务端发送的数据消息,所以需要在客户端中添加输入流对象,用于读取服务器端发送过来的群聊数据
Server
Client:
二、Collection接口
2.1 定义:
在Java.util包中提供集合接口及其接口的实现子类,接口可以理解成是一个容器,可以使用集合帮助程序员进行存放各种元素,类似于之前所学习的数组。
注意:工作中使用集合的频率 > 使用数组的频率。
2.2 优势:
因为数组的使用可以观察到,数组的长度是固定的,所谓的扩容和缩容,实际上是创建新的数组对象。而集合的长度是可变的,没有长度限制,所以使用集合的概率会远远高于使用数组的概率,集合也提供大量的API方法,进行对集合中的元素进行操作。
2.3 分类:
2.4 说明:
Collection接口定义了所有集合都具备的方法,并且该接口提供了两个子接口,分别为Set和List。
-
Set集合中存储的元素规定是不能重复的,并且大部分是无序的
-
List集合中存储的元素规定是允许重复的,例如可以对这两个元素使用equals方法进行比较,如果返回值为true,证明是重复元素。
2.5 集合的add、size、clear、isEmpty方法的使用
package cn.tedu.collection;
import java.util.ArrayList;
import java.util.Collection;
/**
* Collection集合案例演示一
* @author cjn
*
*/
public class CollectionDemo01 {
public static void main(String[] args) {
//1.创建集合对象(向上造型),<E>表示的是泛型,对输入数据进行限制
Collection<String> c = new ArrayList<String>();
/*
* 2.向集合中添加元素
* boolean add(E e)
* 该方法表示可以向集合中添加对应类型的元素,
* 如果添加元素成功,则返回值为true,
* 如果添加元素失败,返回值为false。
*/
c.add("one");
c.add("two");
c.add("three");
c.add("four");
System.out.println("集合对象:" + c);
/*
* 3.查看集合中元素的个数
* int size()
* 该方法可以返回集合中的元素个数
*/
int size = c.size();
System.out.println("集合的元素个数为:" + size);
/*
* 4.判断集合是否是空集合
* boolean isEmpty()
* 该方法如果判断集合为空(不包含元素),返回值为true,
* 反之,包含元素则返回fasle。
*/
boolean isEmpty = c.isEmpty();
System.out.println("集合是否为空集合:" + isEmpty);
/*
* 5.清空集合
* void clear()
*/
c.clear();
System.out.println(c);
System.out.println(c.size());
System.out.println(c.isEmpty());
}
}
测试结果:
集合对象:[one, two, three, four]
集合的元素个数为:4
集合是否为空集合:false
[]
0
true
2.6 contains()方法
集合中还提供了判断指定元素是否被集合进行包含contains(E e),该方法返回值是boolean类型,如果集合中包含指定元素时,则返回值为true。
Point.java:
package cn.tedu.collection;
/**
* 用于判断集合中是否包含某个元素的类
* @author cjn
*
*/
public class Point {
private int x;
private int y;
public Point() {}
public Point(int x, int y) {
super();
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
@Override
public String toString() {
return "Point [x=" + x + ", y=" + y + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;