三十一、Java基础之Collection集合
一、Collection集合
/** * Collection基本操作: * 1.boolean add(E e):向集合中添加元素e * 2.boolean addAll(Collection<? extends E> c):把集合c中所有的元素都添加到当前集合中 * 3.void clear()清空当前集合中所有的元素 * 4.boolean contain(Object o):在当前集合中判断是否包含了元素0 * 5.boolean containAll(Collection<?> c):判断当前集合是否包含集合C中的所有元素 * 6.boolean isEmpty():判断集合是否为空 * 7.Iterator<E> iterator():返回当前集合的迭代器 * 8.boolean remove(Object 0):从当前集合中删除第一个与0匹配的元素 * 9.boolean removeAll(Collection<?> c):在当前集合中删除在c集合中出现的所有元素 * 10.int size():返回集合的元素的个数 * 11.Object[] toArray():把集合转化为数组 */
二、代码演示
1.Collection接口
import java.util.ArrayList; import java.util.Collection; public class Test01 { public static void main(String[] args){ //1、创建Collection集合,Collection是一个接口,需要赋值实现类对象 Collection collection = new ArrayList<>(); //2、向集合中添加元素,默认添加Object类型的 //如果添加基本类型,系统会自动装箱,把包装类对象添加到集合中 collection.add("aaa"); collection.add("bbb"); collection.add(123); collection.add(true); //3、直接打印,collection引用的是ArrayList对象,ArrayList的爷爷类是AbstractCollection重写了toString()方法 System.out.println(collection);//[aaa, bbb, 123, true] //4、判断 System.out.println(collection.isEmpty()); System.out.println(collection.size()); System.out.println(collection.contains("bbb")); //5、删除 collection.remove("bbb"); System.out.println(collection); } }
2.一个集合中一般只存储同一类型的数据,可以在定义集合时,通过泛型约束集合中元素的类型
import java.util.ArrayList; import java.util.Collection; public class Test02 { public static void main(String[] args){ //1、在实际应用中,一个集合中一般只存储同一类型的数据,可以在定义集合时,通过泛型约束集合中元素的类型 //Collection后面的尖括弧指定集合元素类型,就是泛型,泛型就是把数据类型当作参数 Collection<String> collection = new ArrayList<>(); //添加元素时,collection集合就只能添加String类型的数据 collection.add("aa"); collection.add("bb"); collection.add("cc"); collection.add("dd"); //collection.add(123);//Error:(20, 24) java: 不兼容的类型: int无法转换为java.lang.String collection.add("cc"); collection.add("dd"); System.out.println(collection);//[aa, bb, cc, dd, cc, dd] //删除cc,remove()只删除第一个匹配的元素 collection.remove("cc"); System.out.println(collection); //创建第二个集合 Collection<String> collection1 = new ArrayList<>(); collection1.addAll(collection);//把collection中的所有元素添加到当前集合中 System.out.println(collection1); collection1.remove("dd"); System.out.println(collection1);//[aa, bb, cc, dd] //判断colletion集合汇总是否包含collection1集合中所有的元素 System.out.println(collection.containsAll(collection1));//true System.out.println(collection1.containsAll(collection));//true //在collection中删除collection1中的所有元素 collection.removeAll(collection1); System.out.println(collection); //[] } }
3.迭代器
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class Test03 { public static void main(String[] args){ //1、创建一个存储String字符串的Collection的集合 Collection<String> collection = new ArrayList<>(); //2、添加元素 collection.add("gg"); collection.add("jj"); collection.add("dd"); collection.add("jj"); collection.add("dd"); collection.add("jj"); collection.add("mm"); //3、打印 System.out.println(collection);//[gg, jj, dd, jj, dd, jj, mm] //4、遍历 // for (String str :collection) { // System.out.println(str); // } //5、删除所有的dd //collection.remove("dd");//删除第一个匹配的元素 /*for (String string:collection) { if("dd".euqals(string)){ collection.remove("dd"); } }*/ //6、迭代器遍历 //6.1获得迭代器对象 Iterator<String> iterator = collection.iterator(); /** * iterator.hasNext() 用于判断是够还有下个元素没访问 * iterator.next() 返回下个元素,游标下移 * 刚刚获得迭代器时,迭代器的游标指向第一个元素的前面 */ while(iterator.hasNext()){ String string = iterator.next(); if ("dd".equals(string)){ iterator.remove(); } } System.out.println(collection); //7、重新获得迭代器,游标指向第一个元素的前面 iterator = collection.iterator(); //获得迭代器后,如果再通过集合的add,remove,clear等方法修改了集合的结构,在迭代时可能会产生异常 //获得迭代器后,不能再通过集合的add,remove,clear等方法修改了集合的结构 //可以通过集合的add,remove,clear等方法修改集合的结构后,重新获得迭代器对象 //collection.add("jj"); while(iterator.hasNext()){ String str = iterator.next(); //System.out.println(str);//java.util.ConcurrentModificationException if ("jj".equals(str)){ //collection.remove("jj");//java.util.ConcurrentModificationException } } } }
三、Collections工具类简单介绍
/** * java.util.Collections工具类,该工具类有一组方法,synchronizedxx(xxx)可以把xxx * 集合转化为县城安全的集合 * * *static <T> Collection<T> synchronizedCollection(Collection<T> c) * * static <T> List<T> synchronizedList(List<T> list) * * *static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) * * *static <T> Set<T> synchronizedSet(Set<T> s) * * 但是我们在开发多线程程序时。基本不使用这一组操作,在多线程环境中,如果使用List集合就直接使用java.util.concurrent.CopyOnWriteArrayList<E>类 * 如果使用Set集合不需要排序,使用java.util.concurrent.CopyOnWriteArraySet<E>;如果需要排序,使用java.util.concurrent.ConcurrentSkipListSet<E>; * * */
当有些人一出生就有的东西,我们要为之奋斗几十年才拥有。但有一样东西,你一辈子都不会有,那就是我们曾经一无所有。