一、基本概念 :
1、所谓类集就是一个动态的对象数组,是对一些实现好的数据结构和算法进行包装,方便使用。而且类集框架本身不受对象数组的长度限制。
2、为了实现类集容易扩展和修改的特性,类集框架被设计成包含了一组标准接口。常用的类集接口是 : Collection 、List 、Set 、Map 、Iterator 、ListIterator 、Enumeration 、SortedSet 、SortedMap 、Queue 、Map.Entry
3、Collection接口是集合框架的最大接口,但是如果直接使用Collection接口进行操作的话,则表示的操作意义不明确,因此,在实际开发中不提倡直接使用Collection接口进行开发,而基本上都是使用其子接口 。
二、List接口
如果要使用List接口进行操作,则必须依靠其子类实现对象的实例化,在实际开发中,List子接口有 ArrayList 、 LinkedList 等常用子类 。
(一) ArrayList :
1、使用 ArrayList 实现向集合中增加元素,代码如下 :
import java.util.ArrayList ;
import java.util.Collection ;
import java.util.List ;
public class ArrayListDemo{
public static void main(String[] args){
List<String> allList = new ArrayList<String>() ; //定义并实例化List对象,指定String类型
Collection<String> allCollection = new ArrayList<String>() ; //定义并实例化Collection对象,指定String类型
allList.add("Hello") ; //从Collection接口中继承的方法,向集合中增加数据
allList.add(0,"World") ; //List接口扩充的方法,向集合中指定位置增加数据
System.out.println(allList) ; //输出集合中的内容
allCollection.add("abc"); //增加数据
allCollection.add("jkl"); //增加数据
allList.addAll(allCollection) ; //从Collection接口中继承的方法,向集合中增加一组对象
allList.addAll(0,allCollection) ; //此方法List自定义,向集合中指定位置增加一组对象
System.out.println(allList) ; //增加对象,调用toString()方法
}
}
程序运行结果 :
2、使用 ArrayList 删除集合中的元素 ,代码如下 :
import java.util.ArrayList ;
import java.util.List ;
public class ArrayListDemo02{
public static void main(String[] args){
List<String> allList = new ArrayList<String>() ; //定义并实例化List对象,指定String类型
allList.add("Hello") ; //从Collection接口中继承的方法,向集合中增加数据
allList.add(0,"World") ; //List接口扩充的方法,向集合中指定位置增加数据
allList.add("abc"); //增加数据
allList.add("jkl"); //增加数据
allList.remove(0) ; //删除指定位置的元素
allList.remove("Hello") ; //删除指定内容的元素
System.out.println(allList) ; //增加对象,调用toString()方法
}
}
程序运行结果 :
3、使用 size()和get(int index)两个方法输出List 集合中的内容 ,代码如下 :
import java.util.ArrayList ;
import java.util.List ;
public class ArrayListDemo03{
public static void main(String[] args){
List<String> allList = new ArrayList<String>() ; //定义并实例化List对象,指定String类型
allList.add("Hello") ; //从Collection接口中继承的方法,向集合中增加数据
allList.add("Hello") ; //List接口可以存放重复的内容
allList.add(0,"World") ; //List接口扩充的方法,向集合中指定位置增加数据
allList.add("abc"); //增加数据
allList.add("jkl"); //增加数据
System.out.print("由前向后输出:") ;
for(int i=0;i<allList.size();i++){
System.out.print(allList.get(i) + "、") ;
}
System.out.print("\n\n由后向前输出:") ;
for(int i=allList.size()-1;i>=0;i--){
System.out.print(allList.get(i) + "、") ;
}
}
}
程序运行结果 :
4、使用toArray()方法将集合变为对象数组 ,代码如下 :
import java.util.ArrayList ;
import java.util.List ;
public class ArrayListDemo04{
public static void main(String[] args){
List<String> allList = new ArrayList<String>() ; //定义并实例化List对象,指定String类型
allList.add("Hello") ; //从Collection接口中继承的方法,向集合中增加数据
allList.add("Hello") ; //List接口可以存放重复的内容
allList.add(0,"World") ; //List接口扩充的方法,向集合中指定位置增加数据
allList.add("abc"); //增加数据
allList.add("jkl"); //增加数据
String str[] = allList.toArray(new String[]{}); //指定泛型类型
System.out.print("指定数组类型:") ;
for(int i=0;i<str.length;i++){
System.out.print(str[i] + "、") ;
}
System.out.print("\n\n返回对象数组:") ;
Object obj[] = allList.toArray();
for(int i=0;i<obj.length;i++){
String temp = (String) obj[i];
System.out.print(temp + "、") ;
}
}
}
程序运行结果 :
5、集合的其它操作
isEmpty()方法判断集合是否为空
contains()方法判断集合中是否存在指定元素
subList()方法截取部分集合内容
indexOf()方法查询指定元素的位置
代码如下 :
import java.util.ArrayList ;
import java.util.List ;
public class ArrayListDemo05{
public static void main(String[] args){
List<String> allList = new ArrayList<String>() ; //定义并实例化List对象,指定String类型
System.out.println("集合操作前是否为空?" + allList.isEmpty()) ;
allList.add("Hello") ; //增加数据
allList.add("World") ; //增加数据
allList.add("abc"); //增加数据
allList.add("jkl"); //增加数据
allList.add("uio");
System.out.println(allList.contains("Hello")?"\"Hello\"字符串存在! ":"\"Hello\"字符串不存在! ");
List<String> allSub = allList.subList(2,4); //从第二个元素开始截取,到第四个元素之前停止,截取第2,3两个元素
System.out.print("集合截取:") ;
for(int i=0;i<allSub.size();i++){
System.out.print(allSub.get(i) + "、") ;
}
System.out.println("") ; //换行
System.out.println("abc字符串的位置:" + allList.indexOf("abc"));
}
}
程序运行结果 :
(二) 、LinkedList :
LinkedList表示一个链表的操作类,此类虽然实现了List接口,但也同时实现了Queue接口,Queue表示是的队列操作接口,采用FIFO(First Input First Output)先进先出的方式操作。
1、在链表的开头和结尾增加数据
代码如下 :
import java.util.LinkedList;
public class LinkedListDemo01{
public static void main(String[] args){
LinkedList<String> link = new LinkedList<String>();
link.add("A"); //向链表中增加数据
link.add("B"); //向链表中增加数据
link.add("C"); //向链表中增加数据
System.out.println("初始化链表 :" + link); //输出链表内容,调用toString()方法
link.addFirst("X"); //在链表的表头增加内容
link.addLast("Y"); //在链表的表尾增加内容
System.out.println("增加头和尾之后的链表 :" + link); //输出链表内容,调用toString()方法
}
}
程序运行结果 :
2、找到链表头
找到表头:element()
找到且不删除表头:peek()
找到并删除表头:poll()
代码如下 :
import java.util.LinkedList;
public class LinkedListDemo02{
public static void main(String[] args){
LinkedList<String> link = new LinkedList<String>();
link.add("A");
link.add("B");
link.add("C");
System.out.println("1-1、element()方法找表头:" + link.element());
System.out.println("1-2、找完之后的链表内容:" + link);
System.out.println("\n2-1、peek()方法找表头:" + link.peek());
System.out.println("2-2、找完之后的链表内容:" + link);
System.out.println("\n3-1、poll()方法找表头:" + link.poll());
System.out.println("3-2、找完之后的链表内容:" + link);
}
}
程序运行结果 :