一、集合

集合框架
java.util.Collection接口:该接口是所有集合的顶级接口,规定了所有集合都应当具备的 功能方法
*
Collection下面又分为不同的集合类型,常见的有两个:

  • java.util.Set接口:不可重复集,常用实现类java.util.HashSet
  • java.util.list:可重复集,并且有序,常用实现类:java.util.ArrayList和LinkList
    这里的重复是元素是否可以重复,而重复元素的判定标准是元素自身equals比较是否为true

1.1 集合的基本方法

添加(boolean add(E e))、统计个数(int size())、判断是否为空(boolean isEmpty())、清空指令(.clear())

/** boolean add(E e)* 向当前集合中添加给定的元素,返回值为true时表示该元素成功添加的集合中*/Collection c = new ArrayList();//Collection c = new HashSet();c.add("one");c.add("two");c.add("tree");c.add("foue");c.add("one");//List集合可以存放,Set集合就不行了System.out.println(c);/** int size()* 返回当前集合的元素个数*/int size = c.size();//真实反映集合中的元素个数,而数组的lenth是能放多少System.out.println("size:"+size);/** boolean isEmpty()* 判断当前集合是否为空集(集合不含任何元素,即size为0时*/Boolean isEmpty = c.isEmpty();System.out.println("集合是否为空集:"+isEmpty);c.clear();System.out.println(c);System.out.println("size:"+c.size());System.out.println("是否为空集:"+c.isEmpty());

1.2 集合与equals方法相关操作

判断是否包含指定元素:boolean contains(E e)
删除指定元素:boolean remove(E e)

Collection c =new ArrayList();c.add(new Point(1,2));c.add(new Point(3,4));c.add(new Point(5,6));c.add(new Point(7,8));System.out.println(c);Point p = new Point(1,2);/** boolean contains(E e)* 判断当前集合是否包含给定元素,判断依据是给定元素与集合现有元素* 是否存在equals比较为true的情况,存在则认为包含*/boolean contains = c.contains(p);System.out.println(contains);/** boolean remove(E e)* 删除给定元素,删除的也是与给定元素equals比较为true的元素。* 对于List集合而言重复元素只会删除一次。*/c.remove(p);System.out.println(c);

1.2 集合只能储存引用变量

集合只能存放引用类型元素,并且保存的也是元素的引用(地址)

Point p = new Point(1,2);Collection c = new ArrayList();c.add(p);System.out.println("p:"+p);//(1,2)System.out.println("c:"+c);//[(1,2)]p.setX(2);System.out.println("p:"+p);//(2,2)System.out.println("c:"+c);//[(2,2)]

二、聊天室练习

2.1 服务端

package socket;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Arrays;/*** 聊天室的客服端* @author 毛**/
public class Server {/** 服务端使用的是ServerSocket* 它有两个作用:* 1:向系统申请端口。* 2:接收请求该端口的所有客户端的连接。*/private ServerSocket server;/** 内部类可以访问外部类的属性,因此所有ClientHandler都可以访问到外部类* Server属性,所有这里定义一个数组保存所有ClientHandler对应客户端的* 输出流就可以做到共享了,以便每个客户端发消息过来对应的ClientHandler都可以* 通过遍历数组拿到对应客户端的输出流广播消息*/private PrintWriter []allout = { };/*** 服务端构造方法,用来初始化服务端*/public Server() {try {/** 实例化的同时向系统申请服务端口,客户端Socket就是通过这个* 端口与服务端建立连接的。如果该端口被系统其他程序占用了则* 会抛出异常:* java.net.BindException:address already in use: JVM_bind* * 遇到该错误时解决办法:* 1:首先检查是否自己开启过两次服务端,因为第一次启动已经占用了*   该端口,如果再启动一遍时还申请该端口就会提示被占用了。* 2:如果没有启动过两次,那说明系统其他程序占用该端口了,需要更*   换一个可用的。  */System.out.println("正在启动服务端...");server = new ServerSocket(8088);System.out.println("服务端启动完毕!");} catch (IOException e) {e.printStackTrace();}}/*** 服务端开始工作的方法*/public void start() {try {/** ServerSocket提供的方法:* Socket accept()* 该方法是一个阻塞方法,调用该方法后程序"卡住",此时开始等待* 客户端的连接,一旦客户端实例化Socket并连接服务端这边申请的* 端口(8088)时,accept方法会立即返回一个Socket实例,此时等于* 和客户端建立了连接。服务端通过返回的这个Socket就可以与客户端* 进行交互了。* 多次调用accept方法可以接收多个客户端的连接。*/while(true){System.out.println("等待客户端连接...");Socket socket = server.accept();System.out.println("一个客户端连接了!");//启动一个线程处理客户端交互ClientHandler handler = new ClientHandler(socket);Thread t = new Thread(handler);t.start();}} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {Server server = new Server();server.start();}/*** 该线程任务用来与客户端交互*/private class ClientHandler implements Runnable{private Socket socket;private String host;//记录客户端的IP地址信息public  ClientHandler(Socket socket){this.socket = socket;//通过socket获取远程计算机地址信息(对于服务器而言远端就是客户端)host=socket.getInetAddress().getHostAddress();}public void run(){PrintWriter pw = null;try{/** Socket提供的方法:* InputStream getInputStream();* 通过该方法获取的输入流读取的字节是远端计算机发送过来的字节*/InputStream in = socket.getInputStream();InputStreamReader isr = new InputStreamReader(in,"UTF-8");BufferedReader br = new BufferedReader(isr);OutputStream out = socket.getOutputStream();OutputStreamWriter osw = new OutputStreamWriter(out,"utf-8");BufferedWriter bw = new BufferedWriter(osw);pw = new PrintWriter(bw,true);/** 将输出流存入共享数组allout中*/synchronized(allout){//1 将allout数组扩容allout = Arrays.copyOf(allout, allout.length+1);//2 将输出流存入数组最后一个位置allout[allout.length-1] = pw;}System.out.println(host+"上线了,当前在线人数:"+allout.length);String message = "";while((message = br.readLine())!=null) {System.out.println(host+"说:"+message);//回复给所有客户端synchronized(allout){for(int i=0;i<allout.length;i++){allout[i].println(host+"say:"+message);}}}}catch(Exception e){}finally{//处理客户端断开连接操作ssynchronized(allout){//将对应当前客户端的输出流从数组allout中删除for(int i=0;i<allout.length;i++){if(allout[i]==pw){allout[i]=allout[allout.length-1];allout = Arrays.copyOf(allout, allout.length-1);break;}}}System.out.println(host+"下线了,当前在线人数为:"+allout.length);try{/** socket的close方法调用后会与远程计算机断开此时* 通过socket获取的输入流与输出流也被close了、*/socket.close();}catch(IOException e){e.printStackTrace();}}}}}

2.2客户端

package socket;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;/*** 聊天室的客户端* @author 毛**/
public class Client {/** java.net.Socket 套接字* Socket封装了TCP协议的通讯细节,使用它就可以与服务端建立网络连接了,* 并且进行通讯。这里的通讯是以两条流的读写完成与服务端的数据交换的。*/private Socket socket;/*** 客户端构造方法,用于初始化客户端*/public Client() {try {/** 实例化Socket时需要传入两个参数:* 1:服务端的地址信息(IP)* 2:服务端打开的端口* * 我们可以通过IP找到网络上的服务端计算机,通过其打开的端口* 可以连接到服务端应用程序。*/System.out.println("正在连接服务端...");socket = new Socket("localhost",8088);System.out.println("已连接服务端!");} catch (Exception e) {e.printStackTrace();}}/*** 客户端开始工作的方法*/public void start() {try {//先启动用于读取服务端发送消息的线程ServerHandler handler = new ServerHandler();Thread t = new Thread(handler);t.start();/** Socket提供的方法:* OutputStream getOutputStream()* 通过socket的该方法获取的输出流写出的字节会通过网络发送给* 远端计算机。*/OutputStream out = socket.getOutputStream();OutputStreamWriter osw = new OutputStreamWriter(out,"UTF-8");BufferedWriter bw = new BufferedWriter(osw);PrintWriter pw = new PrintWriter(bw,true);Scanner scanner = new Scanner(System.in);while(true) {String message = scanner.nextLine();pw.println(message);}} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {Client client = new Client();client.start();}/*** 该线程负责循环读取服务端发送过来的消息* @author 毛**/private class ServerHandler implements Runnable{public void run(){try{InputStream in = socket.getInputStream();InputStreamReader isr = new InputStreamReader(in,"utf-8");BufferedReader br = new BufferedReader(isr);String message;while((message = br.readLine())!=null){//读取客服端发送回来的一行字符串System.out.println(message);}}catch(Exception e){}}}
}
练习
/*5*/Collection c51 = new ArrayList();Collection c52 = new HashSet();c51.add("123");c52.add("456");c52.add("456");System.out.println(c51+","+c52);int size51=c51.size();int size52 = c52.size();System.out.println(size51);System.out.println(size52);boolean isempty5 = c51.isEmpty();System.out.println(isempty5);isempty5 = c52.isEmpty();System.out.println(isempty5);c52.clear();System.out.println(c52+","+c52.size()+","+c52.isEmpty());/*4*/Collection c41 = new ArrayList();Collection c42 = new HashSet();c41.add("123");c42.add("123");c42.add("456");System.out.println(c42+","+c41);int size4 = c41.size();System.out.println(size4);System.out.println(c42.size());System.out.println(c41.isEmpty()+","+c42.isEmpty());c41.clear();System.out.println(c41+","+c41.size()+","+c41.isEmpty());/*3*/Collection c31=new ArrayList();Collection c32= new HashSet();c31.add("asd");c32.add("zxc");c31.add("asd");c32.add("zxc");System.out.println(c31+","+c32);System.out.println("c31:"+c31.size()+","+c31.isEmpty()+":c32:"+c32.size()+","+c32.isEmpty());c41.clear();System.out.println("c31:"+c31.size()+","+c31.isEmpty()+":c32:"+c32.size()+","+c32.isEmpty());/*2*/Collection c21 = new ArrayList();Collection c22 = new HashSet();c21.add("123");c21.add("123");c22.add("345");c22.add("345");System.out.println(c21+","+c22);System.out.println("c21:"+c21.size()+","+c21.isEmpty()+":c22:"+c22.size()+","+c22.isEmpty());c22.clear();System.out.println("c21:"+c21.size()+","+c21.isEmpty()+":c22:"+c22.size()+","+c22.isEmpty());/*1*/Collection c11 = new ArrayList();Collection c12 = new HashSet();c11.add("123");c11.add("123");c12.add("345");c12.add("345");System.out.println(c11+","+c12);System.out.println("c11:"+c11.size()+","+c11.isEmpty()+":c12:"+c12.size()+","+c12.isEmpty());c12.clear();System.out.println("c11:"+c11.size()+","+c11.isEmpty()+":c12:"+c12.size()+","+c12.isEmpty());
     /*5*/Collection c5 =new ArrayList();c5.add(new Point(1,2));c5.add(new Point(3,4));c.add(new Point(5,6));c.add(new Point(7,8));System.out.println(c);Point p5 = new Point(1,2);boolean contains5 = c5.contains(p5);System.out.println(contains5);c.remove(p5);System.out.println(c5);/*4*/Collection c4 = new ArrayList();c4.add(new Point(1,2));c4.add(new Point(3,4));c4.add(new Point(4,5));System.out.println(c4);Point p4 = new Point(1,2);boolean ct4 = c4.contains(p4);System.out.println(ct4);c4.remove(p4);System.out.println(c4);/*3*/Collection c3 = new ArrayList();c3.add(new Point(1,2));c3.add(new Point(2,3));c3.add(new Point(3,4));System.out.println(c3);Point p3 = new Point(2,3);boolean ct3 = c3.contains(p3);System.out.println(ct3);c3.remove(p3);System.out.println(c3);/*2*/Collection c2 = new ArrayList();c2.add(new Point(1,2));c2.add(new Point(2,3));c2.add(new Point(3,4));System.out.println(c2);Point p2 = new Point(3,4);boolean ct2 = c2.contains(p2);System.out.println(ct2);c2.remove(p2);System.out.println(c2);/*1*/Collection c1 = new ArrayList();c1.add(new Point(1,2));c1.add(new Point(2,3));c1.add(new Point(3,4));System.out.println(c2);Point p1 = new Point(1,2);boolean ct1 = c1.contains(p1);System.out.println(ct1);c1.remove(p1);System.out.println(c1);
     /*5*/Point p5 = new Point(1,5);Collection c5 = new ArrayList();c5.add(p5);System.out.println("p5:"+p5);//1,5System.out.println("c5:"+c5);//1,5p5.setX(5);System.out.println("p5:"+p5);//5,5System.out.println("c5:"+c5);//5,5/*4*/Point p4 = new Point(2,4);Collection c4 = new ArrayList();c4.add(p4);System.out.println("p4:"+p4);//2,4System.out.println("c4:"+c4);//2,4p4.setX(4);System.out.println("p4:"+p4);//4,4System.out.println("c4:"+c4);//4,4/*3*/Collection c3 = new ArrayList();Point p3 =new Point(3,3);c3.add(p3);System.out.println("p3:"+p3);//3,3System.out.println("c3:"+c3);//3,3p3.setY(33);System.out.println("p3:"+p3);//3,33System.out.println("c3:"+c3);//3,33/*2*/Collection c2 = new ArrayList();Point p2 = new Point(4,2);c2.add(p2);System.out.println("p2:"+p2);//4,2System.out.println("c2:"+c2);//4,2p2.setX(44);System.out.println("p2:"+p2);//44,2System.out.println("c2:"+c2);//44,2/*1*/Point p1 = new Point(5,1);Collection c1 = new ArrayList();c1.add(p1);System.out.println("p1:"+p1);//5,1System.out.println("c1:"+c1);//5,1p1.setX(55);System.out.println("p1:"+p1);//55,1System.out.println("c1:"+c1);//55,1

JAVA SE 学习day_10:集合、聊天室练习最终版相关推荐

  1. Java用TCP手写聊天室 可以 私聊版加群聊版

    一:引言 想要私聊必须有规定的格式:@名字:要说的话 二:上码 1.服务端 package com.wyj.talkhome; /** * 实现一个用户可以接发多条消息 * * */ import j ...

  2. JAVA SE学习day_12:集合的排序、队列、栈结构

    一.集合的排序 1.1 集合的排序 集合的工具类java.util.Collections提供了一个静态方法sort,可以对List集合 进行自然排序,即:从小到大 除了自然排序之外还有反转.乱序方法 ...

  3. JAVA SE学习day_11:集合的相关应用、增强型for循环、foreach方法、数组与集合的相互转换

    一.集合的相关应用 1.1 将一个集合加到另一个集合上 boolean addAll(Collection c) 将给定集合中的所有元素添加到当前集合中.调用方法之后只要c1集合发生变化就返回true ...

  4. 【java毕业设计】基于java+原生Sevlet+socket的聊天室系统设计与实现(毕业论文+程序源码)——聊天室系统

    基于java+原生Sevlet+socket的聊天室系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+原生Sevlet+socket的聊天室系统设计与实现,文章末尾附有本毕业设 ...

  5. java毕业设计——基于java+TCP+UDP的局域网聊天室系统设计与实现(毕业论文+程序源码)——局域网聊天室系统

    基于java+TCP+UDP的局域网聊天室系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+TCP+UDP的局域网聊天室系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地 ...

  6. 第一阶段Java SE学习概述

    Java SE学习概述 Java SE 学习分为五个阶段 第一部分:基础程序设计: 第二部分:面现象对象编程: 第三部分:Java SE 高级应用: 第四部分:JavaSE 新特性: 第五部分:MyS ...

  7. java socket多人聊天室_如何运用Java socket实现多人聊天室功能

    如何运用Java socket实现多人聊天室功能 导语:如何运用Java socket实现多人聊天室功能呢?下面是小编给大家提供的代码实现,大家可以参考阅读,更多详情请关注应届毕业生考试网. 目录结构 ...

  8. java用UDP作简易聊天室

    -------------------------------------------------java用UDP作简易聊天室------------------------------------- ...

  9. java socket多人聊天_如何运用Java socket实现多人聊天室功能

    导语:如何运用Java socket实现多人聊天室功能呢?下面是小编给大家提供的代码实现,大家可以参考阅读,更多详情请关注应届毕业生考试网. 目录结构: ChatClient: package com ...

最新文章

  1. sqlalchemy 网页_抓取网页数据,上班也能看股票
  2. 在Ubuntu 14.04 64bit下编译安装rtmpdump并调试输出
  3. leangoo思维导图工具
  4. 全排列(含递归和非递归的解法)
  5. 深入理解Java虚拟机(第三弹)- JVM 内存分配与回收策略原理,从此告别 JVM 内存分配文盲
  6. 计算机组成与结构实验箱,HQFC-B1计算机组成和数字电路实验箱
  7. 麒麟操作系统配置网络_讲解银河麒麟桌面操作系统
  8. IQ推理:红眼睛和蓝眼睛
  9. 给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数
  10. android 书架菜单,Android入门3--做一个书架
  11. 中断下半部机制-softirq-Tasklet-工作队列
  12. JVM优化系列-JVM内存溢出的原因
  13. JustOJ1500: 蛇行矩阵
  14. 小米盒子3增强版 android,小米盒子3增强版拆机评测 怎么样?好不好?
  15. 浅谈 渗透测试工程师(黑客) 技能
  16. VS2017出现的神奇错误HRSULT:0x80041FE2
  17. PLC 数据内存读写 调试软件工具
  18. 10G家庭光纤网络如何部署?
  19. 【网络安全】OSSIM平台网络日志关联分析实战
  20. html文件做屏保win10,给Win10系统设置一个漂亮屏保的三种方法(图文)

热门文章

  1. Vim 自动文件头注释与模板定义
  2. SQL实现分组查询取前几条记录
  3. tar 解压缩命令详解
  4. python ipython spyder
  5. 如何在用户控件中操作页面中的控件?
  6. 在一个有返回值的方法中,用block回传的解决方法
  7. 如何处理Entity Framework中的DbUpdateConcurrencyException异常
  8. Ubuntu安装新英伟达驱动出现问题解决方法
  9. MySQL测试环境遇到 mmap(xxx bytes) failed; errno 12解决方法
  10. 一个通用的计数限制解决方案