java集合1.1
1、Collection 接口
Collection 是最基本的集合接口,一个 Collection 代表一组 Object,即 Collection 的元素, Java不提供直接继承自Collection的类,只提供继承于的子接口(如List和set)。
Collection 接口存储一组不唯一,无序的对象。
2 List 接口
List接口是一个有序的 Collection,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中位置,类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素。
List 接口存储一组不唯一,有序(插入顺序)的对象。
3、List特点:有序可重复
ArrayList 和 LinkedList 有序可重复
- 有序指的是下标
- 可重复指的是的可以存储相同的值,将相同值存储在不同下标位置上实现,并且按照新增的顺序储存
ArrayList储存读取数据
1、添加元素
< > 钻石符
使用 add() 方法添加元素到 ArrayList
//使用 add() 方法:
public class Arrog {
@Test
public void test01() {
List list=new ArrayList();
基本类型和对象都可以添加
byte a = 1;
short b = 2;
int c = 3;
long d = 4l;
double e = 5.0d;
float f = 6.0f;
char g = 'a';
boolean h = false;
String i="你好java";
Cat cat=new Cat();
使用 add() 方法添加元素:
list.add(a);
list.add(b);
list.add(c);
list.add(d);
list.add(e);
list.add(f);
list.add(g);
list.add(h);
list.add(i);
list.add(cat);
System.out.println(list.size());//长度10
}
2、访问元素
使用 get() 方法可以访问 ArrayList 中的元素
注意:数组的索引值从 0 开始。
// get() 方法访问
@Test
public void test09() {
List list = new ArrayList();
list.add("你好java");
list.add(23);
list.add('a');
使用 get() 方法,通过下标访问 ArrayList 中的元素
System.out.println(list.get(2));
System.out.println(list.get(0));
3、修改元素
使用 set() 方法:如果要修改 ArrayList 中的元素可以使用 set() 方法
根据index下标获取参数
@Test
public void test03() {
List<Integer> list = new ArrayList<>(List.of(0, 1, 2, 3, 4));
System.out.println(list);
//第一个参数为索引位置根据index下标获取参数,第二个为要修改的值,将下标3改为25
list.set(3,25);
System.out.println(list);
}
---------------------------------------------------------------------
运行:
[0, 1, 2, 3, 4]
[0, 1, 2, 25, 4]
4、删除元素
使用 remove() 方法:删除 ArrayList 中的元素
@Test
public void test03() {
List<Integer> list = new ArrayList<>(List.of(0, 1, 2, 3, 4));
System.out.println(list);
//第一个参数为索引位置,第二个为要修改的值,将下标3改为66
list.set(3,66);//[0, 1, 2, 66, 4]
//第一个参数为索引位置,第二个为要插入的值
list.add(1,6);//[0, 6, 1, 2, 66, 4]
System.out.println(list);
//删除下标1 的值
list.remove(1);
System.out.println(list);
------------------------------------------------------------------------------
运行:
[0, 1, 2, 3, 4]
[0, 6, 1, 2, 66, 4]
[0, 1, 2, 66, 4]
计算大小
如果要计算 ArrayList 中的元素数量可以使用 size() 方法
@Test
public void test03() {
List<Integer> list = new ArrayList<>(List.of(0, 1, 2, 3, 4));
System.out.println(list.size());
5、泛型
**:限定参数的数据类型
< 参数类型> 钻石符
List<参数类型> :可限定参数的数据类型
@Test
public void test010() {
List<Integer> list = new ArrayList<Integer>();
list.add(35);
System.out.println(list);
}
}
不可更改元素** 不可变集合和可变集合
不可变集合List.of()
@Test
public void test02() {
List<Integer> list = List.of(0, 1, 2, 3, 4);
System.out.println(list);
//无法更改数值会报错
// list.add(6);
// list.set(2,20);
//System.out.println(list);
}
可变集合:可以修改集合的值
@Test
public void test03() {
//将不可变集合转为可变集合
List<Integer> list = new ArrayList<>(List.of(0, 1, 2, 3, 4));
System.out.println(list);
list.add(6);
System.out.println(list);
list.set(3, 55);
System.out.println(list);
字符串类型的 增、删、改、查
字符串类型的 增、删、改、查
@Test
public void test04() {
List<String> list = new ArrayList<>(List.of("0", "1", "2", "3", "4"));
System.out.println(list);//输出[0, 1, 2, 3, 4]
list.add("徐");
System.out.println(list);//增加数值 [0, 1, 2, 3, 4, 徐]
list.add(3, "33");
System.out.println(list);//插入下标3插入数值 [0, 1, 2, 33, 3, 4, 徐]
list.remove(1);
System.out.println(list);//删除下标1的值 [0, 2, 33, 3, 4, 徐]
list.remove("2");
System.out.println(list);//直接删除数值2 [0, 33, 3, 4, 徐]
list.add("海");
list.add("海");
System.out.println(list);//增加2个数值 [0, 33, 3, 4, 徐, 海, 海]
list.remove("海");
System.out.println(list);//删除数值海 [0, 33, 3, 4, 徐, 海]
list.set(0, "零");
System.out.println(list);//更改下标0的值[零, 33, 3, 4, 徐, 海]
System.out.println(list.get(0));//访问下标0的值 零
}
-----------------------------------------------------------------------
运行:
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4, 徐]
[0, 1, 2, 33, 3, 4, 徐]
[0, 2, 33, 3, 4, 徐]
[0, 33, 3, 4, 徐]
[0, 33, 3, 4, 徐, 海, 海]
[0, 33, 3, 4, 徐, 海]
[零, 33, 3, 4, 徐, 海]
零
6、遍历数组
for循环遍历数组:
@Test
public void test05() {
List<Integer> list = new ArrayList<>(List.of(0, 1, 2, 3, 4));
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
增强for-each循环遍历数组:
@Test
public void test011() {
List<Integer> list = new ArrayList<>(List.of(0, 1, 2, 3, 4));
for (int num : list) {
System.out.println(num);
}
}
7、迭代器遍历集合:
@Test
public void test06() {
List<Integer> list = new ArrayList<>(List.of(0, 1, 2, 3, 4));
// 获取改集合的迭代器
Iterator<Integer> iter = list.listIterator();
// hasNext方法是布尔类型 ,查看是否有数值有就输出,没有就接收,只能遍历一次
while (iter.hasNext()) {
// next方法
Integer next = iter.next();
System.out.println(next);
}
System.out.println("第一次遍历完成");
}
8、ArrayList 和 LinkedList 实现类
相同:
1、有序指的是下标
2、可重复指的是的可以存储相同的值,将相同值存储在不同下标位置上实现,并且按照新增的顺序储存
不同:
1、ArrayList:底层是数组,删除和新增速度慢 因为在曾经产生拷贝删除大概率会移动,导致速度慢,因为是线性储存,所以 查询速度快
2、LinkedList:底层是双向链表结构,新增和删除速度快 元素时数据不动,指针变动重新指向位置,但查询时要先下标排序所以 查询速度慢
快捷键:ctrl+r 代码替换
LinkedList
ArrayList