集合类,Collection,List
一,集合的继承体系图
二.Collection(根接口)
(1)创建集合对象
Collection c=new ArrayList();
(2)给集合中添加元素
c.add(“javaSE”);
(3)将集合转换为数组
Object[] objs = c.toArray() ;
(4)判断集合中是否包括指定元素
c.contains(“javaSE”);
(5)判断集合是否为空
c.isEmpty();
(6)获取集合元素数
c.size();
(7)删除
Boolean removeAll(Collection deleteC);
c.removeAll(c2);//将集合C2中的所有元素从集合c中删除。
(8)包含
boolean containsAll(Collection c):判断一个集合中是否包含另一个集合的所有元素
package collection;
import java.util.ArrayList;
import java.util.Collection;
public class Collection1 {
public static void main(String[] args) {
//创建两个Collection集合对象
Collection c1 = new ArrayList() ;
Collection c2 = new ArrayList() ;
//分别给c1,c2集合添加元素
c1.add("abc1") ;
c1.add("abc2") ;
c1.add("abc3") ;
c1.add("abc4") ;
/*c2.add("abc1") ;
c2.add("abc2") ;
c2.add("abc3") ;*/
c2.add("abc4") ;
// c2.add("abc5") ;
// c2.add("abc6") ;
// c2.add("abc7") ;
System.out.println("c1:"+c1);
System.out.println("c2:"+c2);
//boolean addAll(Collection c):添加一个集合中的所有元素
// System.out.println("addAll:"+c1.addAll(c2));
//boolean removeAll(Collection c):删除一个集合中的所有元素?思考:删除所有算是删除还是删除一个算是删除?
//删除一个算是删除
// System.out.println("removeAll:"+c1.removeAll(c2));
// boolean containsAll(Collection c):判断一个集合中是否另一个集合;思考:是包含一个元素算是包含还是包含所有
// System.out.println("containsAll:"+c1.containsAll(c2));//包含所有算是包含
//boolean retainAll(Collection c):思考:A集合给B集合做交集,交集的元素去哪里?返回值boolean表达什么意思?
/**
* 面试题:
* A集合对B集合取交集,那么交集的元素去A集合里面了,并且返回值boolean表达的意识是A集合中的元素是否发生变化,如果发生变化,就返回true;否则,false
*/
System.out.println("retianAll:"+c1.retainAll(c2));
//输出每个集合中的元素
System.out.println("c1:"+c1);
System.out.println("c2:"+c2);
/**
* 运行结果:
* c1:[abc1, abc2, abc3, abc4]
* c2:[abc4]
* retianAll:true
* c1:[abc4]
* c2:[abc4]
*/
}
}
(9)将集合转换成数组:Object[] toArray()
Object[] objs=c.toArray();
String s=(String)obj[i];//获取集合元素
通过这种方式可以遍历集合中的每个元素
(10)利用集合的专有遍历方式:使用迭代器进行遍历
Iterator iterator():迭代器
* Iterator:迭代器:接口
* 成员方法:Object next()返回迭代的下一个元素:获取功能
* boolean hasNext():判断一个集合中是否有下一个可以迭代的元素:判断功能
*
package org.westos.collection_02;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/**
* 集合的专有遍历方式:使用集合自己本身迭代功能遍历集合中的元素
* Iterator iterator():迭代器
* Iterator:迭代器:接口
* 成员方法:Object next()返回迭代的下一个元素:获取功能
* boolean hasNext():判断一个集合中是否有下一个可以迭代的元素:判断功能
*
* 需求:使用集合存储字符串类型的元素并遍历
* @author Apple
*/
public class CollectionDemo {
public static void main(String[] args) {
//创建集合对象
Collection c = new ArrayList() ;//ArrayList是List集合的子实现类(存储和取出一致的)
//给集合中添加元素
c.add("hello") ;
c.add("world") ;
c.add("java") ;
c.add("java") ;
c.add("java") ;
c.add("java") ;
//获取迭代器对象
//Iterator iterator():迭代器
Iterator it = c.iterator() ;//底层使用ArrayList中的匿名内部类的形式:接口多态的形式
//获取元素:Object next() ;
/*Object obj = it.next() ;
System.out.println(obj);*/
// System.out.println(it.next());
// System.out.println(it.next());
// System.out.println(it.next());
// //java.util.NoSuchElementException:没有这样的元素异常!
// System.out.println(it.next());
//由于当前集合中的元素获取完了,没有元素,而还要去调用next()方法,那么就出现问题,
//假设,给当前加上一个判断就可以防止出现异常!
//判断
while(it.hasNext()){//有,就获取需要被遍历的元素
// System.out.println(it.next());//获取字符串的内容
//获取字符串的同时,还要获取字符串长度
//Object obj = it.next() ;
//向下转型
String s = (String)it.next() ;
System.out.println(s+"----"+s.length());
}
}
}
三,List(extends Collection)
package list;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* List集合是一个有序的集合(存储元素和取出元素是一致的!)
* 该集合中的元素是可以重复的
* List集合的特有功能:
* 添加功能:
* void add(int index, Object element)在列表的指定位置插入指定元素
* 删除功能:
* Object remove(int index)移除列表中指定位置的元素,返回被删除的元素
* 获取功能:
* ListIterator listIterator():列表迭代器:List集合的专有遍历方式
* Object get(int index)返回列表中指定位置的元素。
* 替换
* set(int index,Object element)用指定元素替换列表中指定位置的元素
*
* List集合的遍历方式
* 1)toArray()
* 2)Collection集合中的Iterator iterator
* @author Apple
*/
public class List1Demo {
public static void main(String[] args) {
//创建List集合对象
List list = new ArrayList() ;
//添加一些元素
list.add("hello") ;
list.add("world") ;
list.add("java") ;
//void add(int index, Object element)在列表的指定位置插入指定元素,在指定位置前面插入一个新的元素
// list.add(1, "javaweb") ;
//Object remove(int index)移除列表中指定位置的元素,返回被删除的元素
//IndexOutOfBoundsException:角标越界了
// System.out.println("remove:"+list.remove(3));
System.out.println("list"+list);
System.out.println("remove:"+list.remove(2));
System.out.println("list"+list);
// set(int index,Object element)用指定元素替换列表中指定位置的元素
// System.out.println("set:"+list.set(1, "JavaEE")) ;
//使用普通for的方法去遍历list集合,使用size()和get()相结合
for(int x = 0 ; x < list.size(); x ++){
// Object object = list.get(x) ;
//需求:获取字符串内容同时,获取字符串长度
String s = (String)list.get(x) ;
System.out.println(s+"----"+s.length());
}
System.out.println("-------------------------");
//获取迭代器对象
Iterator it = list.iterator() ;
while(it.hasNext()){
String s = (String) it.next() ;
System.out.println(s+"----"+s.length());
}
System.out.println("get:"+list.get(1)) ;
// System.out.println("get:"+list.get(11)) ;
System.out.println("list"+list);
/**
* 运行结果:
* list[hello, world, java]
* remove:java
* list[hello, world]
* hello----5
* world----5
* -------------------------
* hello----5
* world----5
* get:world
* list[hello, world]
*
*/
}
}
package org.westos_02;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
/**
* List集合的列表迭代器
* ListIterator listIterator()
* 列表迭代器接口中有以下几个方法:
* boolean hasNext():判断是否有下一个可以迭代的元素(正向遍历)
* Object next():如果有可以遍历的元素,就获取这个元素
*
* boolean hasPrevious():判断是否有上一个可以迭代的元素(逆向遍历)
* Object previous():如果有上一个可以迭代的元素,就获取上一个元素
* 注意:
* 要使用逆向遍历,前提必须有正向遍历存在,直接使用逆向遍历,没有意义!
* @author Apple
*/
public class ListDemo3 {
public static void main(String[] args) {
//创建集合对象
List list = new ArrayList() ;
//给集合中添加元素
list.add("hello") ;
list.add("world") ;
list.add("java") ;
//获取列表迭代器
ListIterator it = list.listIterator() ;
while(it.hasNext()){
String s = (String)it.next();
System.out.println(s);
}
System.out.println("-----------------------");
//boolean hasPrevious():判断是否有上一个可以迭代的元素(逆向遍历)
//Object previous():如果有上一个可以迭代的元素,就获取上一个元素
while(it.hasPrevious()){
String s = (String)it.previous() ;
System.out.println(s);
}
}
}
package org.westos_02;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/**
* 问题?
* 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,
* 如果有,我就添加一个"javaee"元素,请写代码实现
* 并发(同一个时间点),并行(同一个时间段)
*java.util.ConcurrentModificationException:并发修改异常:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
* 原因:当前我们用迭代器去遍历元素,使用集合添加的元素,对于迭代器不知道集合添加了这个元素,所以会发生这个异常
* 描述:使用迭代器去遍历集合,是不能直接集合添加元素!
* 解决方案:
* 1)使用迭代器遍历集合,使用迭代器添加元素
* 2)使用集合遍历,使用集合添加元素
* @author Apple
*/
public class ListTest {
public static void main(String[] args) {
//创建List集合对象
List list = new ArrayList() ;
//给集合中添加元素
list.add("hello") ;
list.add("world") ;
list.add("java") ;
// //获取迭代器
// Iterator it = list.iterator() ;
// //遍历
// while(it.hasNext()){
// String s = (String)it.next() ;
// //判断
// if("world".equals(s)){
// //添加一个元素
// list.add("javaee") ;
// }
// }
//方案1:1)使用迭代器遍历集合,使用迭代器添加元素
// Iterator it = list.iterator() ; 该迭代器中没有添加功能,List集合中的专有遍历方式:列表迭代器有添加功能:add(Object obj)
//将指定的元素插入到列表中(指定元素后面插入)
//ListIterator it = list.listIterator() ;
// while(it.hasNext()){
// String s = (String) it.next() ;
//
// //判断
// if("world".equals(s)){
// //使用迭代器添加
// it.add("javaee") ;
// }
// }
//方案2:2)使用集合遍历(普通for循环size()和get()相结合),使用集合添加元素
for(int x = 0 ; x <list.size() ; x ++){
String s = (String) list.get(x) ;
//判断
if("world".equals(s)){
//集合添加
list.add("javaee") ;//在末尾添加元素
}
}
//输出集合
System.out.println("list:"+list);
}
}