1 认识集合
集合框架有哪几种
List接口
Set接口
Iterator接口
Map接口
Collections类
创建集合对象
初始操作
导入jar包
import java.util.*
所有的集合框架都在java.util包下
集合接口和实体类的对应关系
Collection接口下面有List、Set接口
List接口下面有ArrayList、LinkedList两个接口实现类
Set接口下面有一个HashSet接口实习类
Map接口是平行与Collection接口的,下面有一个HashMap接口实现类
List接口
Conllection接口是最基本的集合接口,可以存储一组不唯一、无序的对象。List接口继承自Collection接口,是有序集合。用户可以使用索引访问List接口中的元素,类似数组。List接口中允许存放重复元素,也就是说List可以存储一组不唯一,有序的对象。
List接口常用的实现类有ArrayList,LinkedList
-
使用ArrayList动态存储数据
ArrayList集合类对数组进行了封装,实现了长度可变的数组,而且和数组采用相同的存储方式,在内存中开辟连续的空间,经常称ArrayList为动态数组。但他不等同与数组,ArrayList可以存储任意类型的数据,并且添加的数据都可以转换成Object类型,数组只能存储单一指定的类型。
| 方法 | 说明 |
|---|---|
| boolean add(Object 0) | 在列表末尾添加元素o,起始下标为0 |
| void add(int index,Object 0) | 指定索引下添加元素o,index必须在0到列表元素个数之间 |
| int size() | 返回列表的元素个数 |
| Object get(int index) | 根据下标获取元素,下标在0-元素个数间,取到的值值需要进行强制转换 |
| void set(int index,Object 0) | 替换指定下标的元素 |
| boolean contains(Object 0) | 判断列表是否存在指定元素 |
| int indexOf(Object 0) | 返回元素在集合中出现的索引位置 |
| boolean remove(Object 0) | 从列表中删除元素0 |
| Object remove(int index) | 从列表中删除指定位置的元素 |
示例演示
- 导入类
- 创建对象,添加数据
- 判断集合中是否包含某个元素
- 移除索引为1的元素
- 把索引为0的元素替换成其他的元素
- 输出某个元素所在位置的索引
- 清空列表数据
- 判断集合中是否包含数据
- 使用集合继续列表数据排序
package com.minetel.util;
import java.util.ArrayList; // 1 导入包
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>(); // 2 创建对象
list.add(1); // 2 添加数据
for (int i=0;i<5;i++){
list.add(i*i+1); //for 循环添加数据
}
boolean contains = list.contains(1); // 3 判断集合是否包含元素1,并输出索引
if (contains){
System.out.println("集合中包含该元素");
System.out.println("下标:"+list.indexOf(1));
}else {
System.out.println("集合中不包含该元素");
}
Integer remove = list.remove(1); // 4 移除索引为1的元素
System.out.println("移除的元素值:"+remove);
list.set(0,3); // 5 替换指定索引的元素值
System.out.println("替换后的元素"+list.get(0)+"获取元素3的索引"+list.indexOf(3)); //6 获取指定元素索引
// 7 循环清空数据
for (int i = 0; i<list.size();i++){
list.remove(i);
}
list = new ArrayList<>(); //清空
System.out.println(list.size());
System.out.println(list.size() > 0 ? "包含" : "不包含"); //8 判断集合是否包含数据
int nums = 0;
while (nums<20){
list.add((int) (Math.random()*10));
nums ++; //自增
}
System.out.println("排序前"+list.toString());
//9 集合排序
for (int i= 0;i<list.size();i++){
for (int j= i+1;j<list.size();j++){
if (list.get(i)>list.get(j)){
int temp = list.get(j);
list.set(j,list.get(i));
list.set(i,temp);
}
}
}
//输出结果
System.out.println(list.toString());
}
}
List处理类对象
现场景有蔬菜水果若干,需要存储进数组中进行统一管理 蔬菜水果类-> 编号,名称,数量,单价
package com.minetel.pojo;
public class GreenFruit {
private Integer id;
private String name;
private String numbers;
private double price;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumbers() {
return numbers;
}
public void setNumbers(String numbers) {
this.numbers = numbers;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "GreenFruit{" +
"id=" + id +
", name='" + name + ''' +
", numbers='" + numbers + ''' +
", price=" + price +
'}';
}
}
public static void setGreenFruit(){
ArrayList<GreenFruit> greenFruits = new ArrayList<>();
GreenFruit greenFruit = new GreenFruit();
greenFruit.setId(1);
greenFruit.setName("白菜");
greenFruit.setNumbers("100");
greenFruit.setPrice(8.99);
GreenFruit greenFruit1 = new GreenFruit(2,"苹果","20",9.99);
greenFruits.add(greenFruit); // 添加数据
greenFruits.add(greenFruit1); // 添加数据
System.out.println("品种数量"+greenFruits.size());
System.out.println("蔬菜水果名:");
for (GreenFruit fruit : greenFruits) {
System.out.println(fruit.getName());
}
}