Java新手小白入门篇 API - 集合容器+多线程+IO流+Socket网络编程

这篇博客主要介绍了Java编程中的集合、多线程、IO流和Socket网络编程基础知识。对于集合,讲解了包括ArrayList、LinkedList等在内的常用集合类,以及泛型的概念和应用。在多线程部分,涵盖了线程的创建方式、状态以及线程同步。IO流部分介绍了流的分类和用途,并提供了多个练习题。最后,讲解了ServerSocket和Socket的使用,展示了如何建立网络连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、集合


1. 集合是什么
集合指的是 java.util 包下提供的一些类,我们又称为容器。
提到容器实际我们能联想到是用来装东西的,想到我们之前学习过的数组。没错,两者之间确实有很多相似的地方,但是集合和数组之间也有些区别:数组是固定长度的,集合是可变长度的,数组的访问比较单一,增删改查操作有些比较繁琐,而集合相对比较灵活。

2. 常用的集合类有哪些
Collection 和 Map 接口是所有集合容器的父接口
常用的集合类:

Collection 接口
List 接口
ArrayList(常用)
LinkedList(常用)
CopyOnWriteArrayList
Set 接口
HashSet(常用)
TreeSet
LinkedHashSet
Queue 接口
Deque
Map接口
HashMap(常用)
TreeMap
ConcurrentHashMap

请添加图片描述
二、Collection
1. 常用方法



2. Collection 练习
public class CollectionDemo {
    public static void main(String[] args) {
        // Collection c = new Collection(); // 报错,因为Collection是接口,不能直接new接口
        Collection c = new ArrayList(); // 向上造型

        // add(E e) 将指定的对象添加到集合中
        c.add(100);
        c.add(200);
        c.add(300);
        c.add(400);
        c.add(500);
        System.out.println(c); // [100, 200, 300, 400, 500]

        // size() 返回集合的长度
        int size = c.size();
        System.out.println(size); // 5

        // isEmpty() 判断当前集合是否为空
        boolean empty = c.isEmpty();
        System.out.println(empty); // false

        // contains(Object o) 判断集合中是否包含指定元素
        boolean contains = c.contains(200);
        System.out.println(contains); // true

        Collection c2 = new ArrayList();
        c2.add(300);
        c2.add(400);

        // containsAll(Collection c) 判断集合中是否包含指定集合
        boolean containsAll = c.containsAll(c2);
        System.out.println(containsAll); // true

        // remove(E e) 将指定的对象从集合中移除
        c.remove(200);
        System.out.println(c); // [100, 300, 400, 500]

        // toArray() 将此集合转化为对象数组
        Object[] objects = c.toArray();
        System.out.println(Arrays.toString(objects)); // [100, 300, 400, 500]

        // removeAll(Collection c) 删除集合中共有的元素
        c.removeAll(c2);
        System.out.println(c); // [100, 500]

        // clear() 清空集合
        c.clear();
        System.out.println(c); // []

        // addAll(Collection c) 将指定的集合添加到原有的集合中
        c.addAll(c2);
        System.out.println(c); // [300, 400]

        /**
         * 迭代集合/遍历集合
         * 1) 获取集合的迭代器对象  c.iterator()
         * 2) 判断集合是否有下一个可迭代的元素 it.hasNext()
         * 3) 获取当前迭代到的元素 it.next()
         */
        Iterator it = c.iterator();
        while (it.hasNext()) {
            Object next = it.next();
            System.out.println(next);
        }
        
        Collection c3 = new ArrayList();
        c3.add(300);
        c3.add(600);
        
        // retainAll(Collection c) 取两个集合的交集(共有的元素),赋值给集合c
        c.retainAll(c3);
        System.out.println(c); // [300]
        System.out.println(c3); // [300, 600]
    }
}


三、泛型
1. 概念
泛型是 JDK5 的一个新特性,通常用来和集合对象一起使用,它是程序的增强器,是目前主流的开发方式。
泛型实际是一种 语法糖 ,编译器识别而虚拟机识别。我们在使用集合的时候定义这个泛型的类型,实际就是一种约束作用,用来约束集合中能存放的类型。编译器可以在编译期对泛型约束提供一种类型的安全检查,这样可以避免一些在运行时出现的不必要错误。但是由于它是编译器识别虚拟机不识别,编译之后这个泛型就会被删除掉。

2. 集合的种类
<E> 通常在集合中使用

E
Element
<T> 通常表示类

T
Type
<K,V> 通常表示键值对

K
Key
V
Value
? 表示泛型通配符

例子:

public interface Collection<E> extends Iterable<E> {
    boolean add(E e);
    boolean addAll(Collection<? extends E> c);
    boolean containsAll(Collection<?> c);
    <T> T[] toArray(T[] a);
}

public interface Map<K,V> {}

集合中只能存放引用类型,不能存放基本类型在这里插入图片描述

 

Collection<Integer> c = new ArrayList();
c.add(1);
Collection<int> c2 = new ArrayList(); // 报错,泛型中只能使用引用类型,也表示集合中只能存放引用类型

练习题/面试题
1. 集合中能存储基本类型嘛
2. Collection,List,Set,Map是接口还是类,它们之间有什么关系
3. 集合的遍历使用什么
4. 迭代器是干什么的
5. 迭代的过程中是否能产出元素,如果能怎么删除,如果不能说明原因
6. 新循环(增强for循环)3个参数分别代表什么
7. 数组和集合有哪些区别
 

二、多线程

一、进程和线程
1. 进程
2. 线程
二、创建线程的方式
1. 继承 Thread
2. 实现 Runnable
3. 实现 Callable
4. 线程池
三、线程的状态
四、锁
五、线程练习题
1. 简答
简述下什么是线程,什么是进程
创建线程有几种方式,有什么区别
线程的状态有几种
启动线程是调用run方法,还是start方法
调用start方法启动线程后,线程处于什么状态
2. 代码题
采用匿名内部类的方式创建2个线程,一个线程为计时线程,每隔2s输出当前时间的毫秒表示,另一个线程为前台线程,任务是线程开始,休眠10秒结束,当前台线程结束,计时线程也随之结束。请完成以上案例。

创建2个线程对象表示2个人,二人都要完成在客厅看电视5s,然后去卫生间5s的任务,已知二人同时开始执行任务。
要求:2个人可以同时在客厅看电视,但是上厕所不能同时上,只能排队上
提示:synchronized

有3个线程A、B、C,请写出程序使得三个线程

同时执行
A、B同时执行后执行C
先执行线程A,A执行结束后执行线程B,B执行结束后执行线程C
多线程卖票:
现有4个售票窗口,共计余票100张,将这个票卖完,打印出售票情况:如哪个窗口卖的是第几张票,剩余几张票

二、IO


1. Java中 IO 流分为几种
按照流的流向分
输入流
读操作,将文件读入到内存
InputStream 字节输入流基类
Reader 字符输入流基类

输出流
写操作,将内存中的内容写入到文件
OutputStream 字节输出流基类
Writer 字符输出流基类


按照单元划分
字节流
字符流


按照流的角色划分
节点流
直接与数据源相连
处理流
用于对节点流性能的处理
Java IO流 共涉及40多个类,这些类看上去很杂乱,但是都是从上述的四个抽象类基类派生出来的

在这里插入图片描述

三、练习题
练习一:相对路径和绝对路径的使用
描述:创建两个文件对象,分别使用相对路径— “a.txt” 和绝对路径创建 — “d:/aaa/a.txt”。

 

练习二:检查文件是否存在,文件的创建
描述:检查D盘下是否存在文件a.txt,如果不存在则创建该文件。

练习三:单级文件夹的创建
描述:在D盘下创建一个名为bbb的文件夹。

练习四:多级文件夹的创建
描述:在D盘下创建一个名为ccc的文件夹,要求如下:
1.ccc文件夹中要求包含bbb子文件夹
2.bbb子文件夹要求包含aaa文件夹

练习五:删除文件和文件夹
描述:
将D盘下a.txt文件删除
将D盘下aaa文件夹删除,要求文件夹aaa是一个空文件夹。

练习六:获取文件信息:文件名,文件大小,文件的绝对路径,文件的父路径
描述:
创建"d:/aaa/b.txt",获取D盘aaa文件夹中b.txt文件的文件名,文件大小,文件的绝对路径和父路径等信息,并将信息输出在控制台。

练习七:文件夹或文件的判断
描述:
1.判断File对象是否是文件,是文件则输出:xxx是一个文件,否则输出:xxx不是一个文件。
2.判断File对象是否是文件夹,是文件夹则输出:xxx是一个文件夹,否则输出:xxx不是一个文件夹。(xxx是文件名或文件夹名)

练习八:文件夹的获取方法
描述:
获取指定文件夹下所有的文件,并将所有文件的名字输出到控制台。
注意:不包含子文件夹下的文件

练习九:过滤器
描述:
在练习八的基础上,添加一个过滤器
1.过滤文件
2.过滤文件夹

练习十:文件的获取方法
描述:
控制台输入想要查询的指定文件夹下所有的文件,并将所有文件的名字输出到控制台。
注意:包含子文件夹下的所有文件

Socket网络编程

一、ServerSocket
1. ServerSocket类介绍


java.net.ServerSocket
运行在服务端的ServerSocket类主要用两个作用:

向操作系统申请服务端口,客户端就是通过这个端口与服务端建立连接的
监听服务端口,一旦一个客户端建立连接就会创建一个Socket,使用这个Socket与该客户端交互
//向操作系统申请服务端端口号 8088
ServerSocket serverSocket = new ServerSocket(8088);
//监听服务端端口(阻塞方法,等待客户端连接),并创建Scoket实例,通过这个Scoket实例
//就能和客户端(浏览器)进行交互了
Socket socket = serverSocket.accept();



二、Socket
1. Socket类介绍


java.net.Socket 套接字

1.Socket这个类中封装了TCP传输层协议的连接和通讯细节。
2.通过指定远程的ip地址和端口号,与远程的Socket建立连接。这里可以理解成在两个Socket之间建立了一个管道
3.当其通过绑定字节的输入流和输出流,便可以实现客户端与服务端的网络通信
客户端和服务端通常通过Socket套接字向网络发出请求(request)或者接受响应(response)。

2. Socket常用构造方法


创建一个socket并与指定主机的指定端口相连接。Host为指定的主机的字符串名;port是指定的端口号。
Socket(String host , int port ) ;

创建一个socket 并与指定的IP地址的端口相连接。address 为指定的ip , port 为指定的端口 。
Socket(InetAddress address , int port ) ;



3. Socket建立流链接的方法


输入流 – 读(接受)
public InputStream getInputStream() ;
输出流 – 写(发送)
public OutputStream getOutputStream();
三、ServerSocket 与 Socket 网络编程
请添加图片描述

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值