目录
1.引入(这篇01是初步,源码原理在后面几篇)
2.结构![](https://img-blog.csdnimg.cn/c516b9b45c5c4eb09f9980a24cf884d1.png)
左边是单例集合,右边是双例集合(每个元素要具备Key-Value两个特征)
单例
双例(函数)
Key相当于x,Value相当于y,每个x对应唯一y
3.collection接口
4.List接口
(1)特点
(2) 常用方法
5.ArrayList类
(1)添加元素
PS:一般创建对象引用,我们采用接口类型定义,有句话说的好,面向对象编程很大程度上是面向接口编程,方便以后代码修改和多态。
所以,下面举个例子
这里填2就在最后加一个,填1,那就itbz往后移,如果是3,那就报错:索引不能大于长度
(2)获取元素
然后size()这些哎,懂得都懂
(3)删除元素
(4)替换元素
返回被替换的元素
(5)清空容器
(6)判断是否为空
(7)判断容器是否包含某个元素
(8)查找元素第一次出现的位置
那么查找元素最后一次出现的位置:
6.将单例集合转化为数组
转化为Object数组
这是抽象方法,每个实现类具体实现都不太一样
转化为泛型数组
再次提醒:泛型只是
1)避免类型转换时发生错误
2)把运行时出现的异常提前到编译期,
而实际上泛型是一种仅存于编译期间的神奇的东西,
<string>并不是真正把我们的元素转化为string类型,在运行时刻容器中存的元素还是Object类型
所以下面这样干是会报错的(哪怕你的List本来泛型写的就是string):
而且强转也只能对某一个元素强制转换,不能对一个集合转换。除非你这个数组本来是string然后通过一些代码变成了object,然后才可以整个数组再转换为string
那怎么办呢?在迭代时强制转换即可:
将单例集合转化Wie指定类型数组
这里toArray()里面要传进去一个string[],所以new出来。
但是类型需要参照泛型中的类型
这样就会报错。
7.容器的合并操作
List<String> arr = new ArrayList<>();
arr.add("1");
arr.add("1");
arr.add("1");
arr.add("1");
ArrayList<String> arr2 = new ArrayList<>();
arr2.add("1");
arr.addAll(arr2);
for (String s : arr) {
System.out.println(s);
}
这些合并是宽松的,你甚至可以把一个set去并list。
8.容器交集操作:
List<String> arr = new ArrayList<>();
arr.add("1");
arr.add("1");
arr.add("1");
arr.add("1");
ArrayList<String> arr2 = new ArrayList<>();
arr2.add("2");
System.out.println(arr.retainAll(arr2) );
for (String s : arr) {
System.out.println(s);
}
这里因为arr没有2,所以交集后为空,那么后面的for什么也打印不出来
9.容器的差集操作
就是去掉交集的部分。