一 、ArrayList对象的创建和使用
ArrayList是Java中的一个动态数组类,可以根据需要动态增加或减少元素的大小。要创建并使用ArrayList对象,首先需要导入ArrayList类:
import java.util.ArrayList;
然后可以通过以下步骤创建和使用ArrayList对象:
1.创建ArrayList对象:
ArrayList<String> list = new ArrayList<>();
在这个例子中,我们创建了一个ArrayList对象,其中存储的元素类型为String。你也可以根据需要选择其他类型,如Integer、Double等。
2.
向ArrayList中添加元素:
list.add("Apple");
list.add("Banana");
list.add("Orange");
3.访问ArrayList中的元素
String firstElement = list.get(0);
System.out.println("First element: " + firstElement);
4.遍历ArrayList中的元素:
for (String element : list) {
System.out.println(element);
}
5.删除ArrayList中的元素:
list.remove("Banana");
6.检查ArrayList是否包含某个元素:
if (list.contains("Orange")) {
System.out.println("ArrayList contains Orange");
}
通过这些操作,你可以创建、添加、访问、遍历、删除和检查ArrayList中的元素。ArrayList提供了丰富的方法来操作元素,是Java中常用的数据结构之一。
二、ArrayList数组:灵活性与性能平衡
1、使用ArrayList数组的关键是实例化ArrayList类,并通过Add方法向数组中添加元素。例如,可以定义一个ArrayList数组来存储不同类型的数据:
```csharp
ArrayList list = new ArrayList();
list.Add(10);
list.Add("Hello");
list.Add(3.14);
```
除了Add方法外,ArrayList还提供了一系列用于操作数组的方法,如Remove、Insert、Contains等,可以方便地对数组进行增删改查操作。
### ArrayList数组的优势
1. 灵活性:ArrayList数组可以存储任意类型的对象,不受类型限制,适用于需要存储多种类型数据的场景。
2. 性能平衡:虽然ArrayList在性能上不如泛型集合类(如List<T>),但在某些情况下,ArrayList的性能表现仍然可接受。同时,ArrayList可以在不确定元素类型的情况下提供一定的灵活性。
3. 兼容性:由于ArrayList是.NET Framework中的经典类,它的用法和接口在很多老的代码中仍然存在,具有一定的兼容性和稳定性。
总的来说,ArrayList数组是C#中一种经典的动态数组实现,具有一定的灵活性和性能平衡,适用于一些特定的场景。
本例学习使用ArrayList使用动态数组统计一个班的学生成绩,。创建一个C#控制台应用程序,命名为case0302。在Program类文件中引用命名空间System,接着编写如下代码源:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace case0302
{
internal class Program
{
static void Main(string[] args)
{
List<int> scores = new List<int>();
// 从键盘输入多个学生成绩
Console.WriteLine("请输入学生成绩,输入-1结束:");
int score = 0;
while (score != -1)
{
score = Convert.ToInt32(Console.ReadLine());
if (score != -1)
{
scores.Add(score);
}
}
// 求最高成绩、最低成绩、平均值
int maxScore = scores.Max();
int minScore = scores.Min();
double avgScore = scores.Average();
Console.WriteLine($"最高成绩:{maxScore}");
Console.WriteLine($"最低成绩:{minScore}");
Console.WriteLine($"平均成绩:{avgScore}");
// 对学生成绩排序
scores.Sort();
Console.WriteLine("按从小到大排序:");
foreach (var s in scores)
{
Console.Write(s + " ");
}
Console.WriteLine();
scores.Sort((a, b) => b.CompareTo(a));
Console.WriteLine("按从大到小排序:");
foreach (var s in scores)
{
Console.Write(s + " ");
}
Console.WriteLine();
// 查找特定成绩并显示位置
Console.WriteLine("请输入要查找的成绩:");
int searchScore = Convert.ToInt32(Console.ReadLine());
int index = scores.FindIndex(s => s == searchScore);
if (index != -1)
{
Console.WriteLine($"成绩 {searchScore} 存在,位置为 {index}");
}
else
{
Console.WriteLine($"成绩 {searchScore} 不存在");
}
Console.WriteLine("按任意键继续...");
Console.ReadKey();
}
}
}
保存项目文件并运行程序,程序运行效果如图所示:
ArrayList是Java中的一个动态数组类,可以根据需要动态增加或减少元素的大小。以下是关于ArrayList的一些重要特点:
-
动态大小:ArrayList的大小可以根据需要动态增长或减少,相比于普通数组,不需要指定固定大小。
-
泛型支持:ArrayList支持泛型,可以指定存储在ArrayList中的元素类型,这样可以在编译时检查类型安全性。
-
元素访问:可以通过索引访问ArrayList中的元素,也可以通过迭代器遍历ArrayList中的元素。
-
自动装箱拆箱:ArrayList中只能存储对象类型,如果要存储基本数据类型,会自动进行装箱操作。
-
数组扩容:当ArrayList中的元素个数超过当前容量时,会自动进行扩容操作,通常是扩容为原来容量的1.5倍。
-
线程不安全:ArrayList不是线程安全的,如果多个线程同时访问一个ArrayList实例并且至少有一个线程修改了列表的结构,必须在外部进行同步。
-
性能:ArrayList在随机访问和尾部插入/删除操作上性能较好,但在中间插入/删除操作上性能较差,因为需要移动元素。
总的来说,ArrayList是一个常用的集合类,适合用于需要频繁访问元素、尾部插入/删除元素的场景。