花几千上万学习Java,真没必要!(二十)

news2024/9/22 19:38:24

ArrayList 是一种可以动态增长和缩减的数组,与普通的数组相比,它提供了更加灵活的操作方式。ArrayList 内部使用数组来存储元素,但是它会根据需要自动调整数组的大小,以便能够存储更多的元素。

ArrayList 的主要特点包括:

动态数组:ArrayList 的大小是动态变化的,可以在运行时向其中添加或删除元素,而不需要担心数组越界的问题。
随机访问:与 LinkedList 相比,ArrayList 提供了更好的随机访问性能。可以通过索引(位置)快速地访问或修改 ArrayList 中的元素。
内存连续性:ArrayList 在物理内存中占用一段连续的空间(直到它需要扩容为止)。这种内存连续性有助于快速访问元素,但也可能导致在添加大量元素时需要进行内存复制操作以扩容。
扩容机制:当 ArrayList 中的元素数量超过其内部数组的大小时,ArrayList 会自动创建一个更大的数组,并将原数组中的元素复制到新数组中,以便能够存储更多的元素。扩容操作通常会导致性能开销,因为它需要分配新的内存空间并进行数据复制。
非同步:ArrayList 不是同步的。如果多个线程同时访问一个 ArrayList 实例,并且至少有一个线程从结构上修改了列表(即添加或删除元素),那么它必须保持外部同步。通常通过对自然封装该列表的对象进行同步操作来完成。
泛型支持:ArrayList 是一个泛型类,可以指定它存储的元素类型。泛型支持有助于在编译时检查类型错误,并提供更清晰的代码。


测试代码1:

package arraylist.com;
import java.util.ArrayList;  
import java.util.Iterator;  
  
public class ArrayListExample {  
    public static void main(String[] args) {  
        // 创建 ArrayList 实例  
        ArrayList<String> list = new ArrayList<>();  
        ArrayList<Integer> numbers = new ArrayList<>(10);  
  
        // 向 ArrayList 添加元素  
        list.add("Hello");  
        list.add("World");  
        numbers.add(1);  
        numbers.add(2);  
  
        // 访问 ArrayList 中的元素  
        System.out.println("First element in list: " + list.get(0));  
        System.out.println("Second number in numbers: " + numbers.get(1));  
  
        // 遍历 ArrayList  
        System.out.println("\nElements in list:");  
        for (String item : list) {  
            System.out.println(item);  
        }  
  
        System.out.println("\nElements in numbers:");  
        Iterator<Integer> iterator = numbers.iterator();  
        while (iterator.hasNext()) {  
            System.out.println(iterator.next());  
        }  
  
        // 移除 ArrayList 中的元素  
        list.remove(0); // 移除第一个元素  
        if (numbers.contains(1)) {  
            numbers.remove((Integer) 1); // 移除值为 1 的元素  
        }  
  
        // 再次遍历 ArrayList 查看变化  
        System.out.println("\nAfter removal:");  
        System.out.println("Elements in list:");  
        for (String item : list) {  
            System.out.println(item);  
        }  
  
        System.out.println("\nElements in numbers:");  
        for (Integer num : numbers) {  
            System.out.println(num);  
        }  
  
        // 获取 ArrayList 的大小  
        System.out.println("\nSize of list: " + list.size());  
        System.out.println("Size of numbers: " + numbers.size());  
  
        // 检查 ArrayList 是否为空  
        System.out.println("\nIs list empty? " + list.isEmpty());  
        System.out.println("Is numbers empty? " + numbers.isEmpty());  
    }  
}

运行结果如下:

 

测试代码2:

package arraylist.com;
import java.util.ArrayList;  

//用户类  
class User {  
 private String name;  
 private int age;  
 private String email;  


 public User(String name, int age, String email) {  
     this.name = name;  
     this.age = age;  
     this.email = email;  
 }  

 @Override  
 public String toString() {  
     return "User{" +  
             "name='" + name + '\'' +  
             ", age=" + age +  
             ", email='" + email + '\'' +  
             '}';  
 }  
}  

//ArrayList<User>用来存储用户对象的列表。
public class UserManager {
	private ArrayList<User> users;  

 public UserManager() {  
     this.users = new ArrayList<>();  
 }  

//通过addUser方法,可以向列表中添加新用户。
 public void addUser(User user) {  
     users.add(user);  
 }  

//通过printUsers方法,遍历列表并打印出每个用户的信息。 
 public void printUsers() {  
     for (User user : users) {  
         System.out.println(user);  
     }  
 }  

 public static void main(String[] args) {  
     UserManager userManager = new UserManager();  
     userManager.addUser(new User("Alice", 30, "alice@example.com"));  
     userManager.addUser(new User("Bob", 25, "bob@example.com"));  

     // 打印所有用户信息  
     userManager.printUsers();  
 }  
}

 运行结果如下:

测试代码3:

package arraylist.com;
import java.util.ArrayList;  

//商品类  
class Product {  
 private String name;  
 private double price;  

 public Product(String name, double price) {  
     this.name = name;  
     this.price = price;  
 }  

 @Override  
 public String toString() {  
     return "Product{" +  
             "name='" + name + '\'' +  
             ", price=" + price +  
             '}';  
 }

 public double getPrice() {  
     return price;  
 }  
}  
//ArrayList<Product>用来存储购物车中的商品项。
public class ShoppingCart {  
	
 private ArrayList<Product> items;  

 public ShoppingCart() {  
     this.items = new ArrayList<>();  
 }  

//通过addItem方法,向购物车中添加商品。
 public void addItem(Product product) {  
     items.add(product);  
 }  

 //通过printCart方法,遍历并打印出购物车中的商品信息。
 public void printCart() {  
     for (Product item : items) {  
         System.out.println(item);  
     }  
 }  

 // 通过calculateTotal方法,计算购物车中商品的总价。
 public double calculateTotal() {  
     double total = 0;  
     for (Product item : items) {  
         total += item.getPrice(); 
     }  
     return total;  
 }  

 public static void main(String[] args) {  
     ShoppingCart cart = new ShoppingCart();  
     cart.addItem(new Product("Laptop", 999.99));  
     cart.addItem(new Product("Headphones", 59.99));  

     // 打印购物车内容  
     cart.printCart();  

     // 计算并打印购物车总价  
     System.out.println("Total: $" + cart.calculateTotal());  
 }  
}

运行结果如下:

 

测试代码4:

package arraylist.com;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ArrayListTest {
    public static void main(String[] args) {
        // 动态数组
        ArrayList<String> dynamicArray = new ArrayList<>();
        
        dynamicArray.add("element1");
        dynamicArray.add("element2");
        dynamicArray.remove(0);
        
        System.out.println(dynamicArray); 
        
        // 随机访问
        dynamicArray.add("element1");
        dynamicArray.add("element2");
        
        String element = dynamicArray.get(0);
        System.out.println(element);  
        
        dynamicArray.set(1, "newElement");
        System.out.println(dynamicArray);  
        
        // 非同步示例
        List<String> synchronizedList = Collections.synchronizedList(dynamicArray);
        
        synchronized(synchronizedList) {
            // 执行需要同步的操作  
        }
        
        // 泛型支持
        ArrayList<Integer> integerList = new ArrayList<>();
        
        integerList.add(100);
        int value = integerList.get(0);
        System.out.println(value); 
    }
}

运行结果如下:

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1939846.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何成为学习高手

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 所有的学习方式&#xff0c;核心都是动脑加动手。 区别在于如何让…

吴恩达大模型LLM系列课程学习(更新42门课程)

目录 GPT-4o详细中文注释的Colab中英文字幕观看视频1 浏览器下载插件2 打开官方视频 课程1&#xff1a;Prompt Compression and Query Optimization课程2&#xff1a;Carbon Aware Computing for GenAI developers课程3&#xff1a;Function-calling and data extraction with …

Java语言程序设计——篇六(1)

字符串 概述创建String类对象     字符串基本操作实战演练 字符串查找字符串转换为数组字符串比较实战演练 字符串的拆分与组合 概述 字符串 用一对双引号“”括起来的字符序列。Java语言中&#xff0c;字符串常量或变量均用类实现。 字符串有两大类&#xff1a; 1&…

2024年【起重机司机(限桥式起重机)】考试题及起重机司机(限桥式起重机)新版试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 起重机司机(限桥式起重机)考试题参考答案及起重机司机(限桥式起重机)考试试题解析是安全生产模拟考试一点通题库老师及起重机司机(限桥式起重机)操作证已考过的学员汇总&#xff0c;相对有效帮助起重机司机(限桥式起重…

JS 原型与原型链图解:彻底搞懂的终极指南

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热爱技术和分享&#xff0c;欢迎大家交流&#xff0c;一起学习进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 在JavaScript中&#xff0c;原型和原型链是非常重要的知识点&#xff0c;只有理解了…

Express+mysql单表分页条件查询

声明&#xff08;自己还没测试过&#xff0c;只提供大概逻辑&#xff0c;什么多表连接查询可以在原基础上添加&#xff09; class /*** param connection Express的mysql数据库链接对象* current 当前页* pageSize 一页显示行数* where [{key:id,operator:,value15}], key查询…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 卢小姐的生日礼物(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

pg_restore导入错误的解决思路

背景 开发使用postgresql 数据库&#xff0c;当需要部署时&#xff0c;通过pg_dump导出&#xff0c;通过pg_restore导入&#xff0c;发现导入遇到错误&#xff0c;很多表没有导入。部分报错截图如下&#xff1a; 排查问题 开发中用到了postgresql插件postgis里的地理类型&am…

ORBSLAM3 ORB_SLAM3 Ubuntu20.04 ROS Noetic 虚拟机镜像 下载

下图是build.sh 和 build_ros.sh编译结果截图&#xff1a; slam数据集测试视频&#xff1a; orbslam3 ubuntu20.04 test 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1nre0Y9vig5QXIGU52qCLbQ?pwd9rbi 提取码&#xff1a;9rbi

什么是裸机管理程序?

在这个旨在使最终用户体验尽可能无缝的快节奏环境中&#xff0c;企业不断扩展其网络以处理增加的负载&#xff0c;为了应对可扩展性问题并增强其设备的最佳性能&#xff0c;网络管理员开始使用虚拟化技术。 通过使用管理程序虚拟化网络&#xff0c;网络管理员可以实现灵活、可…

C++基础(3.内和对象)

目录 赋值运算符重载: const限制权限&#xff1a; 隐式类型转换&#xff1a; 再探构造函数&#xff1a; static成员&#xff1a; 有元&#xff1a; 内部类&#xff1a; 赋值运算符重载: 赋值运算符重载是一个默认成员函数,用于完成两个已经存在的对象直接的拷贝赋值.要注…

【STM32 HAL库】全双工I2S+双缓冲DMA的使用

1、配置I2S 我们的有效数据是32位的&#xff0c;使用飞利浦格式。 2、配置DMA **这里需要注意&#xff1a;**i2s的DR寄存器是16位的&#xff0c;如果需要发送32位的数据&#xff0c;是需要写两次DR寄存器的&#xff0c;所以DMA的外设数据宽度设置16位&#xff0c;而不是32位。…

pgsql的update语句在set里进行字段的运算 SET sort = sort +1

一、场景 需求&#xff1a;version 版本字段是记录数据更新的次数&#xff0c;新增时自动填充 version1 ,每更新一次数据 version就自增1。项目里单表插入和更新要手写update语句进行插入和更新。 –表中int4类型的字段 version 是1时&#xff0c;由1变成2 – version 是null…

嵌入式人工智能(10-基于树莓派4B的DS1302实时时钟RTC)

1、实时时钟&#xff08;Real Time Clock&#xff09; RTC&#xff0c;全称为实时时钟&#xff08;Real Time Clock&#xff09;&#xff0c;是一种能够提供实时时间信息的电子设备。RTC通常包括一个计时器和一个能够记录日期和时间的电池。它可以独立于主控芯片工作&#xff…

5.过滤器Filter(doFilter()+chain.doFilter())

过滤器Filter 文章目录 过滤器Filter一、过滤器简介1.定义2.作用3.拦截原理4.常用方法:5.Filter的生命周期4.web.xml中配置5.WebFilter 一、过滤器简介 1.定义 过滤器是对Web应用程序的请求和响应添加功能的Web服务组件(实现 javax.servlet.Filter 接口的 Java 类。) 调用web…

Neuralink首款产品Telepathy:意念控制设备的革新与挑战

近年来&#xff0c;科技领域不断涌现出令人惊叹的突破&#xff0c;其中尤以脑机接口&#xff08;BCI&#xff09;技术为代表。近日&#xff0c;Elon Musk的Neuralink公司发布了其首款脑机接口产品Telepathy&#xff0c;引发了广泛关注。本文将详细探讨Telepathy的功能、技术原理…

Java语言程序设计基础篇_编程练习题**15.6(两个消息交替出现)

**15.6(两个消息交替出现) 编写一个程序&#xff0c;当单击鼠标时面板上交替显示两个文本"Java is fun"和"Java is powerful" 代码展示&#xff1a;编程练习题15_6TwoInfo.java package chapter_15;import javafx.application.Application; import javafx…

JavaScript之Web APIs-DOM

目录 DOM获取元素一、Web API 基本认知1.1 变量声明1.2 作用和分类1.3 DOM树1.4 DOM对象 二、获取DOM对象2.1 通过CSS选择器来获取DOM元素2.2 通过其他方式来获取DOM元素 三、操作元素内容3.1 元素.innerTest属性3.2 元素.innerHTML属性 四、操作元素属性4.1 操作元素常用属性4…

mysql无法启动

总是报错&#xff1a; 1、Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xeu mysql.service" for details. 2、ERROR 2002 (HY000): Cant connect to local …

Linux可视化工具-netdata之docker安装

版本要求 docker cli安装 docker pull netdata/netdata docker run -d --namenetdata \ --pidhost \ --networkhost \ -v netdataconfig:/etc/netdata \ -v netdatalib:/var/lib/netdata \ -v netdatacache:/var/cache/netdata \ -v /:/host/root:ro,rslave \ -v /etc/passwd…