1、List集合框架
2、集合的定义
集合就是一个保存数据的容器。在计算机中引入集合,是为了便于处理一组类似的数据。Java标准库自带的java.util包提供了集合相关的接口和实现类:Collection接口,它是除了Map接口外所有其他集合类的根接口。
3、List集合的特点
- List集合的特点:有序、允许重复。
- List的行为和数组几乎完全相同:List 内部按照放入元素的先后顺存放,每个元素都可以通过索引确定自己的位置,List的索引和数组一样,从0开始。
- List的实现类:ArrayList、LinkedList、Vector。
-
ArrayList的内部数据结构是Object[]数组:初始化为一个空数组{ },第一次添加元素时,该数组扩容为10,数组容量不足时,该数组的容量扩容为原容量的1.5倍。扩容方法:grow()。
4、ArrayList的主要方法
- 方法1:add(E e) 作用:添加新元素至集合的尾部
- 方法2:add(int index,E e) 作用:添加新元素至集合的指定位置
- 方法3:addAll(Collection c) 作用:添加另一个集合中所有的元素至当前集合的尾部
- 方法4:addAll(int index,Collection c) 作用:添加另一个集合中所有的元素至当前集合指定位置
package com.ret.demo2;
import java.util.ArrayList;
public class Demo_02 {
public static void main(String[] args) {
// 创建集合对象
ArrayList<String> list = new ArrayList<String>();
// 操作1:添加新元素
// add(E e)方法:添加新元素至集合尾部
list.add("小乔");
list.add("曹操");
list.add("刘备");
list.add("后羿");
System.out.println(list);
// add(int index,E e)方法:添加新元素至集合的指定位置
list.add(1, "李白");
System.out.println(list);
// addAll(Collection c)方法
// addAll(int index, Collection c)方法
// 添加另外一个集合中所有的元素至当前集合
ArrayList<String> subList = new ArrayList<String>();
subList.add("猪八戒");
subList.add("猪八戒");
subList.add("白骨精");
// 将subList中所有元素添加至list集合的尾部
// list.addAll(subList);
list.addAll(0, subList);
System.out.println(list);
}
}
- 方法5:get(int index) 作用:获取元素(按照下标位置,获取元素)
- 方法6:remove(int index) 作用:按照下标删除元素
- remove(Object value) 作用:按照值删除
- 方法7:indexOf(Object o) 作用:查找元素
- 方法8:set(int index,E e) 作用:按照下标,修改对应元素。
package com.ret.demo2;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
public class Demo_03 {
public static void main(String[] args) {
// 创建临时的List集合
List<String> boyList = Arrays.asList("yk", "qtz", "cby", "cph", "zrz", "dcq", "ywq");
// 全部添加至ArrayList集合中
ArrayList<String> list = new ArrayList<String>();
list.addAll(boyList);
// 操作2:获取元素(按照下标位置,获取元素)
// get(int index)
String first = list.get(0);
String last = list.get(list.size() - 1);
System.out.println("首元素:" + first);
System.out.println("尾元素:" + last);
System.out.println(list);
// 操作3:删除元素(按照下标或值,进行删除)
// remove(int index); 按照下标删除
// remove(Object value) 按照值删除
System.out.println("删除前:" + list);
// list.remove(1); //按照下标删除
list.remove("范亚丽"); // 按照值删除
System.out.println("删除后:" + list);
// 操作4:查找元素
// indexOf(Object o)
int index1 = list.indexOf("张文英");
System.out.println("查找一个不存在的元素时:" + index1);
int index2 = list.indexOf("杨文琦");
System.out.println("查找一个已经存在的元素时:" + index2);
// 操作5:修改元素
// set(int index,E e) : 按照下标位置修改
System.out.println("修改前:"+list);
list.set(1,"尊");
System.out.println("修改后:"+list);
}
}
- 方法9:list.clear() 作用:清空集合内的所有元素
- 方法10:isContains(E e) 作用:查看元素是否存在
- 方法11:subList(int index,int index) 作用:截取子集合
- 方法12:toArray() 作用:将集合转换成数组
- 方法13:toArray(T[ ] a) 作用:将集合转换成数组
package com.ret.demo2;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Demo_04 {
public static void main(String[] args) {
List<String> boyList = Arrays.asList("yk", "qtz", "cby", "cph", "zrz", "dcq", "ywq");
// 全部添加至ArrayList集合中
ArrayList<String> list = new ArrayList<String>();
list.addAll(boyList);
System.out.println(list);
// 清空
// list.clear();
// 查看元素是否存在
// boolean isContains = list.contains("yq");
// System.out.println(isCotains);
// 截取子集合
List<String> subs = list.subList(0, 3); // Object数组
System.out.println(subs);
// 转换成数组
Object[] array1 = list.toArray(); // Object数组
String[] array2 = list.toArray(new String[list.size()]);// String[]数组
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
}
}
5、通过创建ArrayList集合
1、通过无参构造方法创建ArrayList集合
// 通过【无参构造方法】创建ArrayList集合
// 数组默认被初始化成一个空数组
ArrayList<Integer> list1 = new ArrayList<Integer>();
// 添加到11个元素时,容量不足,再次将数组扩容,按照原容量的1.5倍
2、通过有参构造方法创建ArrayList集合
// 通过【有参构造方法】创建ArrayList集合
// 根据预估数据元素的规模数量,初始化elementData数组
// 减少扩容的次数频率
ArrayList<Integer> list2 = new ArrayList<Integer>(200);
6、数组的遍历
遍历方法1:冒泡排序
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.addAll(Arrays.asList("E","D","K","M","N","A"));
//方式1:冒泡排序
for(int i = 0;i<list.size()-1;i++) {
for(int k = 0;k<list.size()-1-i;k++) {
if(list.get(k).compareTo(list.get(k+1))>0) {
String temp = list.get(k);
list.set(k, list.get(k+1));
list.set(k+1, temp);
}
}
}
}
遍历方法2:使用sort()方法
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.addAll(Arrays.asList("E","D","K","M","N","A"));
//方式2:使用sort()方法
list = new ArrayList<String>();
list.addAll(Arrays.asList("E","D","K","M","N","A"));
list.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
System.out.println(list);
}