目录
1.ArrayList容器类
ArrayList 是 List 接口的实现类。是 List 存储特征的具体实现。
ArrayList 底层是用数组实现的存储。 特点:查询效率高,增删效率低,线程不安全。
1.1添加元素
package Container;
import java.util.ArrayList;
import java.util.List;
public class ArrayListTest01 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
boolean flag = list.add("chen"); //按照索引进行顺序的存储方式
System.out.println(flag); //add(elem)会返回一个boolean类型的值
list.add(0,"张三"); //按照索引位置插入元素
list.add(0,"李四");
//输出容器中的元素
for(int i = 0;i<list.size();i++) {
System.out.println(list.get(i));
}
}
}
运行结果:
1.2获取元素
package Container;
import java.util.ArrayList;
import java.util.List;
public class ArrayListTest01 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
boolean flag = list.add("chen"); //按照索引进行顺序的存储方式
System.out.println(flag);
list.add(0,"张三"); //按照索引位置插入元素
list.add(0,"李四");
//输出容器中的元素
System.out.println(list.get(0));
System.out.println(list.get(1));
System.out.println(list.get(2));
}
}
运行结果:
1.3删除元素
package Container;
import java.util.ArrayList;
import java.util.List;
public class ArrayListTest01 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
boolean flag = list.add("chen"); //按照索引进行顺序的存储方式
System.out.println(flag);
list.add(0,"张三"); //按照索引位置插入元素
list.add(0,"李四");
//输出容器中的元素
list.remove(1); //删除容器中指定位置索引的元素
System.out.println(list.get(0));
System.out.println(list.get(1));
}
}
1.4替换元素
package Container;
import java.util.ArrayList;
import java.util.List;
public class replaceTest {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张三");
list.add(0,"李四");
list.add(2,"王五");
list.add(2,"老六");
System.out.println("------替换元素------");
//将“老六”替换为“社会六”,将原来的值返回给val
String val = list.set(1,"社会六");
//输出原来的值
System.out.println(val);
for(int i = 0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}
1.5清空容器
list.clear();
System.out.println(list.size()); //清空完成返回0
1.6判断容器是否为空
//如果容器为空则返回true,否则返回false
boolean flag = list.isEmpty();
System.out.println(flag);
1.7判断容器中是否包含指定元素
//如果在容器中包含指定元素则返回true,否则返回false。
boolean flag = list.contains("oldlu1");
System.out.println(flag);
1.8查找元素位置(第一次出现/最后一次出现)
package Container;
import java.util.ArrayList;
import java.util.List;
/*
* index返回在容器中第一次出现的位置
* 不存在则返回-1
*
* */
public class firstTest {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张三");
list.add(0, "李四");
list.add(2, "王五");
list.add(2, "老六");
list.add(3,"老六");
list.add(4,"老六");
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i)+"\t");
}
System.out.println("");
String name = "老六";
int index = list.indexOf(name);
//如果元素不存在则返回-1
String name2 = "张四";
int index1 = list.indexOf(name2);
System.out.println(name+"在容器中第一次出现的索引序列"+index);
System.out.println(name2+"在容器中第一次出线的索引序列"+index1);
System.out.println("-----在容器中最后一次出现的位置-----");
int index2 = list.lastIndexOf(name);
System.out.println(name+"在容器中最后一次出现时的索引序列"+index2);
//当所给元素不存在时候,返回-1
int index3 = list.lastIndexOf(name2);
System.out.println(name2+"在容器中最后一次出现的索引序号"+index3);
}
}
运行结果:
1.9将单例集合转换为数组
package Container;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/*
* 将单例集合转换为数组
* */
public class ToArrayListTest {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add(0,"张三");
list1.add(1, "李四");
list1.add(2, "王五");
list1.add(3, "老六");
System.out.println("容器内容:");
for (int i = 0; i < list1.size(); i++) {
System.out.print(list1.get(i)+"\t");
}
System.out.println("");
System.out.println("数组长度:"+list1.size());
//将ArrayList转换为Object数组,但是在转换之后对数组不能做强制类型转换
Object[] arr = list1.toArray();
System.out.println("转换为数组后输出:");
System.out.println(Arrays.toString(arr));
System.out.println("-----将单例集合转化为指定类型的数组-----");
// 可以将单例集合转换为指定类型数组,但是类型需要参考泛型中de
String[] arr2 = list1.toArray(new String[list1.size()]);
System.out.println(Arrays.toString(arr2));
}
}
1.10容器的并集操作
package Container;
import java.sql.ClientInfoStatus;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/*
* 容器的并集操作
* Union set是并集的意思
* */
public class UnionSetTest {
public static void main(String[] args) {
// 容器1
List<String> list = new ArrayList<>();
list.add(0,"张三");
list.add(1,"李四");
list.add(2,"王五");
list.add(3,"赵六");
// 容器2
List<String> list1 = new ArrayList<>();
list1.add(0,"王五");
list1.add(1,"赵六");
list1.add(2,"沈七");
list1.add(3,"老八");
boolean flag = list.addAll(list1);
System.out.println(flag);
// 我们遍历一下是否并集完成。我们用上述知识先转化为数组,然后在用增强for循环来操作一下遍历
String[] arr = list.toArray(new String[list.size()]);
System.out.println(Arrays.toString(arr));
// 增强for循环遍历
for(String str : list){
System.out.println(str);
}
}
/*
* 我们不能对一个没有元素的容器进行并集操作,不然会返回false
* */
}
结果:
1.11容器的交集操作
所谓交集就是两个容器中相同的部分
package Container;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/*
* 容器的交集操作
* */
public class InterSectionTest {
public static void main(String[] args) {
// 容器1
List<String> list = new ArrayList<>();
list.add(0, "张三");
list.add(1, "李四");
list.add(2, "王五");
list.add(3, "赵六");
// 容器2
List<String> list1 = new ArrayList<>();
list1.add(0, "王五");
list1.add(1, "赵六");
list1.add(2, "沈七");
list1.add(3, "老八");
boolean flag = list.retainAll(list1);
System.out.println(flag);
String[] arr = list.toArray(new String[list.size()]);
System.out.println(Arrays.toString(arr));
}
}
结果:
1.12容器的差集操作
package Container;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/*
* 容器的差集操作
* 容器1中的元素如果容器2中也存在相同部分的元素,则在容器1中会相对应的删除相同部分,仅保留下容器1中不重复的元素
* */
public class DifferentSetTest {
public static void main(String[] args) {
// 容器1
List<String> list = new ArrayList<>();
list.add(0, "张三");
list.add(1, "李四");
list.add(2, "王五");
list.add(3, "赵六");
// 容器2
List<String> list1 = new ArrayList<>();
list1.add(0, "王五");
list1.add(1, "赵六");
list1.add(2, "沈七");
list1.add(3, "老八");
boolean flag = list.removeAll(list1);
System.out.println(flag);
String[] arr = list.toArray(new String[list.size()]);
System.out.println(Arrays.toString(arr));
}
}
结果:
2.Vector容器
Vector 底层是用数组实现的,相关的方法都加了同步检查,因此“线程安全,效率低”。比如,indexOf 方法就增加了 synchronized 同步标记。
2.1Vector容器的使用:
Vector 的使用与 ArrayList 是相同的,因为他们都实现了 List 接口,对 List 接口中的抽象方法做了具体实现。而具体实现方法和ArrayList的实现方法大同小异,我们就一步到位!
package Container;
import java.util.Arrays;
import java.util.List;
import java.util.Vector;
public class VectorTest {
public static void main(String[] args) {
List<String> vector = new Vector<>();
// 添加元素
boolean flag = vector.add("张三");
vector.add(1, "李四");
System.out.println(flag);
// 获取元素
int num = 0;
System.out.println("索引" + num + "位置的元素为" + vector.get(num));
// 替换元素
vector.set(1, "张四");
// 在这里我们优先将vector容器中的元素转换到数组里面以便查找方便
String[] arr = vector.toArray(new String[vector.size()]);
System.out.println("此时容器中的元素为:" + Arrays.toString(arr));
// 删除元素
vector.remove(1); //删除张四
// 清空容器 判断容器是否为空
vector.clear();
System.out.println("容器中的元素个数为:" + vector.size()); //清空之后size返回0
// 在这里我们重新添加新的元素进去
vector.add(0, "张三");
vector.add(1, "李四");
vector.add(2, "王五");
// 判断容器中是否包含指定元素
String name = "张三";
String name1 = "张四";
boolean flag1 = vector.contains(name);
boolean flag2 = vector.contains(name1);
System.out.println(name + "包含结果为:" + flag1);
System.out.println(name1 + "包含结果为:" + flag2);
// 查找元素位置:第一次和最后一次(我们首先对容器内容作出增加)
vector.add("赵六");
vector.add("七七");
vector.add("老八");
vector.add("小汉堡");
System.out.println("第一次出现:" + vector.indexOf("张三"));
System.out.println("最后一次出现:" + vector.lastIndexOf("张三"));
// vector的并集操作
//我们先定义另一个容器
List<String> vector2 = new Vector<>();
vector2.add("李四");
vector2.add("李五");
vector2.add("张三");
vector2.add("老八");
vector2.add("小汉堡");
String[] arr_v1 = vector.toArray(new String[vector.size()]);
System.out.println("目前容器vector的元素为:" + Arrays.toString(arr_v1));
String[] arr_v2 = vector2.toArray(new String[vector2.size()]);
System.out.println("目前容器vector2的元素为:" + Arrays.toString(arr_v2));
//并集操作
vector.addAll(vector2);
String[] arr2 = vector.toArray(new String[vector.size()]);
System.out.println("并集操作之后容器中的元素为:" + Arrays.toString(arr2));
/*// 交集
boolean flag3 = vector.retainAll(vector2);
System.out.println("交集操作实现结果:"+flag3);
String[] arr3 = vector.toArray(new String[vector.size()]);
System.out.println("交集操作之后容器中的元素为:"+Arrays.toString(arr3));
// 差集
boolean flag4 = vector.removeAll(vector2);
System.out.println("差集操作实现结果:"+flag4);
String[] arr4 = vector.toArray(new String[vector.size()]);
System.out.println("差集操作之后容器中的元素为:"+Arrays.toString(arr4));
}*/
}
}
由于作者在写代码的过程中发现交集和差集运行中出现了一些问题,暂时找不到解决办法,就先注释掉。运行结果为 :
ArrayList容器类和vector容器类就先写到这里!
欢迎评论私信我你们遇到的问题,看到后我会第一时间帮你答疑解惑!本文为作者复盘时梳理的知识点内容,三周左右复盘完大学Java学习中的所有内容,届时会设置为仅粉丝可查阅,感兴趣的同学可以关注我哦!也欢迎咨询你遇到的别的问题!