集合是“由若干个确定的元素锁构成的整体”,在程序中,一般代表保存若干个元素(数据)的某种容器类。在Java中,如果一个Java对象可以在内部持有(保存)若干其他Java对象,并对外提供访问接口,我们把这种Java对象的容器称为集合。
集合大体框架
List集合简介
Collection接口是除Map接口外所有集合的跟接口,List集合是一种有序列表的集合,List的行为和数组几乎完全相同,List内部按照放入元素的先后顺序存放,每个元素都可以通过索引确定自己的位置,List的索引和数组一样,从0开始
List集合特点:有序,允许重复
List和数组类似,也是有序结构,使用数组添加和删除元素时,在数组中“添加”的元素时,要添加的位置后面的所有元素需全部依次向后移一个位置为其空出一个位置,相反,删除时全部向前一个位置。而ArraysList在内部使用数组来存储所有元素,当需要在指定位置添加一个元素时,ArraysList自动移动需要移动的位置
List集合的实现类:ArraysList类 LinkedList类 TreeList类
1.ArraysList类
主要方法
- add(E e):添加元素至集合尾部
- add(int index,E e):添加新元素至指定下标位置
- addAll(Collection c):添加另一个集合中所有元素至该集合的尾部
- addAll(Collection c):添加另一个集合中所有元素至该集合指定下标位置
- get(int index):获取指定下标位置元素
- remove(int index):按照指定下标删除元素
- remove(Object value):按照值删除
- indexOf(Object o):查找元素
- set(int index,E e):按照下标修改对应元素
- list.clear():清空集合内 所有元素
- isContains(E e):查看元素是否在集合内存在
- subList(int index,int index):截取子集合
- toArray():将集合转换为数组
- toArray(T[] a):将集合转换为数组
具体实现如下:
import java.util.ArrayList;
public class demo01 {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<String>();
//操作1,添加新元素
//add(E e)方法:添加新元素至集合的尾部
list.add("小乔");
list.add("曹操");
list.add("大乔");
list.add("刘备");
list.add("后羿");
System.out.println(list);
list.add(0,"李白");
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);
//将sublist中所有元素添加至list集合的指定位置
list.addAll(0, sublist);
System.out.println(list);
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class demo02 {
public static void main(String[] args) {
//创建临时数组的List集合
List<String> a=Arrays.asList("cd","vd","zw","zx","赵依婷","肖战","wd","ws","yuy","guagau","aja","lala");
//操作1:全部添加至ArrayList集合中
ArrayList<String> list=new ArrayList<String>();
list.addAll(a);
System.out.println(list);
//操作2:获取元素(按照下标位置,获取元素)
//get(int index)
String first=list.get(0);
String last=list.get(list.size()-1);
System.out.println("首元素:"+first);
System.out.println("尾元素:"+last);
//操作3:删除元素(按照下标或值,进行删除)
//remove(int index);按照下标删除
//remove(Object value)按照值删除
System.out.println("删除前:"+list);
//list.remove(4);
list.remove("赵依婷");
System.out.println("删除后:"+list);
//操作4:查找元素
//index(Object o)
int index1=list.indexOf("张元英");
System.out.println("查找一个不存在的元素"+index1);
int index2=list.indexOf("肖战");
System.out.println("查找一个存在的元素"+index2);
//清空
//list.clear();
//查看元素是否存在
//boolean isContains=list.contains("王一博")
//System.out.println(isContains);
//截取子集和
//List<String> subs=list.subList(0,5);
//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));
}
}
用集合实现排序
1.冒泡排序
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
public class demo03 {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<String>();
list.addAll(Arrays.asList("D","E","T","G","U","I","O"));
for(int i=0,n=list.size();i<n-1;i++) {
for(int k=0;k<n-i-1;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);
}
}
}
System.out.println(list);
//执行结果:[D, E, G, I, O, T, U]
2.使用sort方法
list=new ArrayList<String>();
list.addAll(Arrays.asList("D","E","T","G","U","I","O"));
list.sort(new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o1.compareTo(o2);
}
});
System.out.println(list);
}
}
通过无参构造方法创建ArraysLiat集合
ArraysList集合内部是一个Object[]数组,当创建一个集合对象时,会初始化一个数组,当第一次添加元素时,数组扩容10,当数组容量不足时,该数组的容量扩容为原容量的1.5倍。
import java.util.ArrayList;
import java.util.Arrays;
public class demo04 {
public static void main(String[] args) {
//通过【无参构造方法】创建ArraysListJ集合
//数组默认被初始化成一个空数组
ArrayList<Integer> list1=new ArrayList<Integer>();
list1.add(1587);
list1.add(2355);
list1.add(4873);
list1.add(2465);
//添加至第11个元素时,容量不足,再次将数组扩容,按照原数组的1.5倍
ArrayList<Integer> list2=new ArrayList<Integer>();
ArrayList<Integer> list3=new ArrayList<Integer>(Arrays.asList(1,2,3));
}
}