CSdiy java 04

1 ArrayList

ArrayList<TextSearch> 是 Java 中 ArrayList 泛型类的一种实例化形式,以下是具体介绍:

1. ArrayList 基础特性

  • 动态数组实现本质是动态数组,不像普通数组在创建时需指定固定长度,它能根据元素添加自动扩容。比如初始容量一般为 10 ,元素超出容量时,会扩容至原容量约 1.5 倍 ,通过复制原数组到新的更大数组实现。
  • 有序且可重复:元素按插入顺序存储,可存放重复元素 ,能通过索引访问元素,像 get(index) 就能获取对应位置元素。
  • 实现众多接口:实现 List 接口,具备列表基本操作方法;实现 RandomAccess 接口,支持随机访问,可快速通过下标获取元素;实现 Cloneable 接口,可被克隆;实现 Serializable 接口,支持序列化传输。
  • 非线程安全:多线程环境下并发操作可能出现数据不一致问题,在单线程使用,多线程可选择 Vector 或 CopyOnWriteArrayList 。

2. 泛型参数 TextSearch

TextSearch 是指定给 ArrayList 的泛型类型参数 ,这意味着该 ArrayList 实例只能存储 TextSearch 类型(或其子类型)的对象。比如在文本搜索相关应用中,TextSearch 类可能封装了文本内容、搜索方法等相关属性和操作,用 ArrayList<TextSearch> 可方便管理多个文本搜索任务或结果对象。 如此一来,在编译阶段就能确保类型安全,避免添加不匹配类型对象导致的运行时错误 。

3. 常用操作

  • 添加元素:用 add 方法,如 ArrayList<TextSearch> list = new ArrayList<>(); list.add(new TextSearch()); 。
  • 获取元素:通过索引,如 TextSearch ts = list.get(index); 。
  • 删除元素:用 remove 方法,可根据索引或对象删除,如 list.remove(index); 或 list.remove(textSearchObj); 。
  • 判断是否包含元素:使用 contains 方法,像 boolean contains = list.contains(textSearchObj); 。

总之,ArrayList<TextSearch> 结合了 ArrayList 动态数组的灵活便利性和泛型带来的类型安全性,方便对 TextSearch 类型对象进行批量管理和操作。

2 什么叫API?

在 Java 里,API(Application Programming Interface)即应用程序编程接口,它是一系列预先定义的类、方法、接口、常量等,目的是让开发者在编写软件时能更便捷地调用特定功能,而无需了解其内部实现细节。

Java API 主要有以下这些特点和用途:

标准库 API

Java 提供了丰富的标准库 API,它们被封装在不同的包中,涵盖了基础数据类型处理、集合框架、输入输出操作、网络编程、多线程等诸多方面。下面是一些常见的 Java 标准库 API 及其示例:

1. java.lang 包

此包是 Java 语言的核心包,会自动导入,提供了如 StringIntegerObject 等基础类。

java

// 使用 String 类的方法
String str = "Hello, World!";
int length = str.length();
System.out.println("字符串的长度是: " + length);
2. java.util 包

该包提供了集合框架、日期时间处理、随机数生成等工具类。

java

import java.util.ArrayList;
import java.util.List;

// 使用 ArrayList 集合
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
System.out.println("列表中的元素: " + list);
3. java.io 包

这个包用于处理输入输出操作,像文件读写、网络数据传输等。

java

import java.io.FileWriter;
import java.io.IOException;

// 使用 FileWriter 写入文件
try (FileWriter writer = new FileWriter("test.txt")) {
    writer.write("Hello, Java API!");
} catch (IOException e) {
    e.printStackTrace();
}

第三方 API

除了 Java 标准库 API,还有许多第三方组织或开发者提供的 API,例如:

  • 数据库连接 API:像 JDBC(Java Database Connectivity),它能让 Java 程序与各种数据库(如 MySQL、Oracle 等)进行交互。
  • 网络开发 API:例如 Spring 框架,它能简化 Java Web 应用的开发,提供了诸如依赖注入、面向切面编程等功能。

自定义 API

开发者在开发过程中,也能根据自身需求定义 API,将一些常用的功能封装成类和方法,供其他模块调用。以下是一个简单的自定义 API 示例:

java

// 自定义 API 类
class MathUtils {
    public static int add(int a, int b) {
        return a + b;
    }
}

// 使用自定义 API
public class Main {
    public static void main(String[] args) {
        int result = MathUtils.add(3, 5);
        System.out.println("3 + 5 的结果是: " + result);
    }
}

总的来说,Java API 是 Java 开发中极为重要的一部分,它极大地提升了开发效率,让开发者能够专注于业务逻辑的实现。

3 java里面什么叫多线程,什么叫单线程?

在 Java 编程里,单线程和多线程是两种不同的程序执行模式,下面为你详细介绍它们的概念、特点和示例。

单线程

单线程指的是程序在执行时,只有一个执行路径,也就是只有一个线程在运行,程序会按照代码的顺序依次执行每个任务,只有当前任务完成后,才会执行下一个任务。

特点
  • 顺序执行:程序严格按照代码的先后顺序执行,一个任务完成后才会开始下一个任务。
  • 简单易懂:由于执行顺序单一,程序的逻辑比较简单,易于理解和调试。
  • 效率较低:如果某个任务执行时间较长,会阻塞后续任务的执行,导致整体效率不高。
示例代码

java

public class SingleThreadExample {
    public static void main(String[] args) {
        // 任务 1
        for (int i = 0; i < 5; i++) {
            System.out.println("Task 1: " + i);
        }
        // 任务 2
        for (int i = 0; i < 5; i++) {
            System.out.println("Task 2: " + i);
        }
    }
}

在这个示例中,程序会先执行任务 1 的循环,等任务 1 完成后,再执行任务 2 的循环。

多线程

多线程是指程序中包含多个执行线程,这些线程可以并发执行,也就是在同一时间内,多个任务可以同时进行,从而提高程序的执行效率。

特点
  • 并发执行:多个线程可以同时执行不同的任务,充分利用 CPU 的多核资源,提高程序的执行效率。
  • 资源共享:多个线程可以共享程序中的资源,如内存、文件等,但需要注意线程安全问题。
  • 复杂难控:由于多个线程并发执行,程序的执行顺序变得不确定,增加了程序的复杂性和调试难度。
示例代码

java

class Task implements Runnable {
    private String taskName;

    public Task(String taskName) {
        this.taskName = taskName;
    }

    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(taskName + ": " + i);
            try {
                // 模拟任务执行时间
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class MultiThreadExample {
    public static void main(String[] args) {
        // 创建两个线程
        Thread thread1 = new Thread(new Task("Task 1"));
        Thread thread2 = new Thread(new Task("Task 2"));

        // 启动线程
        thread1.start();
        thread2.start();
    }
}

在这个示例中,创建了两个线程 thread1 和 thread2,它们分别执行 Task 类中的 run 方法。由于线程是并发执行的,任务 1 和任务 2 的输出结果会交替出现。

综上所述,单线程适合逻辑简单、顺序执行的程序,而多线程则更适合需要同时处理多个任务、提高程序性能的场景。

4 有关Graphic扩展项目的代码解释

1. public class SimpleDraw extends JPanel implements Runnable

含义:这行代码定义了一个名为 SimpleDraw 的公共类。

其中 extends JPanel 表示 SimpleDraw 类继承自 JPanel 类 , JPanel 是 Swing (Swing 是 Java 语言用于开发图形用户界面(GUI)的工具包 ,是 Java 基础类(JFC)的一部分中用于创建容器的组件,可用来组合和管理其他组件,通过继承它, SimpleDraw 类能拥有 JPanel 的属性和方法并进行扩展。

 implements Runnable 表示 SimpleDraw 类实现了 Runnable 接口,实现该接口后,类需要提供 run 方法的具体实现,通常用于创建可在单独线程中执行的任务 ,方便实现动画等需要多线程执行的功能。

2. private final int FRAME_DELAY = 50; // 50 ms = 20 FPS

含义:这里定义了一个私有且不可变( final 修饰)的整型变量 FRAME_DELAY ,并赋值为 50 。

注释 50 ms = 20 FPS 说明了它的作用,即表示每帧之间的延迟时间为 50 毫秒 。

帧率(Frames Per Second,FPS)是指动画或视频每秒显示的帧数,根据公式 1000ms / 帧率 = 每帧延迟时间 ,1000 毫秒除以 50 毫秒等于 20,所以对应 20 帧每秒的帧率,在动画绘制场景中,用于控制动画更新的节奏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值