ArrayList是Java集合框架中的一个动态数组实现,它继承了AbstractList类并实现了List接口。ArrayList允许存储重复元素,并且维护元素的插入顺序。
// 创建空的ArrayList
ArrayList<String> list1 = new ArrayList<String>();
// 创建带有初始容量的ArrayList
ArrayList<Integer> list2 = new ArrayList<Integer>(20);
// 从其他集合创建ArrayList
List<String> existingList = Arrays.asList("A", "B", "C");
ArrayList<String> list3 = new ArrayList<String>(existingList);
<>
表示集合中存储的数据类型(泛型)。想要使集合能够支持所有类型的数据(包括小数、整数、字符串等),可以使用。需要注意的是,集合类型仅支持引用类型,基本数据类型如
int
不可直接使用,必须通过其包装类Integer
来实现。
ArrayList<String> fruits = new ArrayList<String>();
// 添加单个元素
fruits.add("Apple");
fruits.add("Banana");
// 在指定位置插入元素
fruits.add(1, "Orange");
// 批量添加集合元素
List<String> additionalFruits = Arrays.asList("Grapes", "Mango"); //先创建一个列表additionalFruits将值存在里面
fruits.addAll(additionalFruits);//再用列表中的值添加到集合的元素
// 根据索引获取元素
String firstFruit = fruits.get(0);
// 遍历ArrayList
for(String fruit : fruits) {
System.out.println(fruit);
}
// 使用迭代器
Iterator<String> it = fruits.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
// 根据索引删除
fruits.remove(0);
// 根据对象删除
fruits.remove("Banana");
// 删除所有元素
fruits.clear();
// 条件删除
fruits.removeIf(fruit -> fruit.startsWith("A"));
if(fruits.isEmpty()) {
System.out.println("集合为空");
}
if(fruits.contains("Apple")) {
System.out.println("包含苹果");
}
// 学生成绩管理系统
ArrayList<Integer> scores = new ArrayList<Integer>();
scores.add(85);
scores.add(90);
scores.add(78);
// 计算平均分
double sum = 0;
for(int score : scores) {
sum += score;
}
double average = sum / scores.size();
System.out.println("平均分: " + average);
HashSet是Java集合框架中Set接口的一个实现,它使用哈希表存储元素。HashSet不允许重复元素,不保证元素的插入顺序,允许包含null值。
// 创建空HashSet
HashSet<String> set1 = new HashSet<String>();
// 创建带有初始容量的HashSet
HashSet<Integer> set2 = new HashSet<Integer>(20);
// 从其他集合创建HashSet
List<String> list = Arrays.asList("A", "B", "C");
HashSet<String> set3 = new HashSet<String>(list);
<>
表示集合中存储的数据类型(泛型)。想要使集合能够支持所有类型的数据(包括小数、整数、字符串等),可以使用。需要注意的是,集合类型仅支持引用类型,基本数据类型如
int
不可直接使用,必须通过其包装类Integer
来实现。
HashSet<String> colors = new HashSet<String>();
colors.add("Red");
colors.add("Green");
colors.add("Blue");
// 添加重复元素会被忽略
colors.add("Red"); // 不会添加
// HashSet没有get方法,需要遍历
for(String color : colors) {
System.out.println(color);
}
// 使用迭代器
Iterator<String> it = colors.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
// 删除指定元素
colors.remove("Green");
// 删除所有元素
colors.clear();
if(colors.isEmpty()) {
System.out.println("集合为空");
}
if(colors.contains("Blue")) {
System.out.println("包含蓝色");
}
// 转换为Object数组
Object[] colorArray = colors.toArray();
// 转换为指定类型数组
String[] colorStringArray = colors.toArray(new String[0]);
// 网站用户注册系统,确保用户名唯一
HashSet<String> usernames = new HashSet<String>();
usernames.add("user1");
usernames.add("user2");
// 检查新用户名是否可用
String newUsername = "user1";
if(usernames.contains(newUsername)) {
System.out.println("用户名已存在");
} else {
usernames.add(newUsername);
System.out.println("注册成功");
}
特性 | ArrayList | HashSet |
---|---|---|
允许重复元素 | 是 | 否 |
维护插入顺序 | 是 | 否 |
查找性能 | O(n) 线性查找 | O(1) 哈希查找 |
添加性能 | O(1) 末尾添加,O(n)中间插入 | O(1) |
删除性能 | O(n) | O(1) |
内存使用 | 更高效 | 需要额外内存维护哈希表 |
元素访问 | 通过索引 | 只能通过遍历或迭代器 |
实现接口 | List | Set |
线程安全性 | 非线程安全 | 非线程安全 |
排序支持 | 保持插入顺序 | 无序 |