集合框架(一)Collection
���习过了ArrayList,知道集合是一种容器,用来装数据的,类似于数组,但集合的大小可变,开发中也非常常用。
为了满足不同的业务场景需求Java还提供了很多不同特点的集合给我们选择。
集合体系结构
Collection是一个接口,并且是支持泛型的接口,这个接口只规定了单列集合的特点,比如基本的增删改查,同时Collection下面又有很多子接口List接口和Set接口
Collection的常用方法
collection提供的所有的常见方法是所有单列集合都可以直接去使用的。
import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; public class CollectionTest2API { public static void main(String[] args) { /*首先肯定要用collection定义一个集合,集合类型是String类型的数据, collection是接口不能之间new对象,那就挑一个他的实现类ArrayList的集合对象 给到Collection集合的变量c来记住*/ Collection c = new ArrayList();//多态写法 //1.public boolean add(E,e):添加元素,添加成功返回true c.add("java1");c.add("java1");c.add("java2");c.add("java2");c.add("java3"); System.out.println(c); //2.public void clear(E e):清空集台中所有的元素。 //c.clear(); //System.out.println(c); //3.public boolean isEmpty():判断当前集合是否为空。 System.out.println(c.isEmpty()); //4.public int size():返回集合中元素的个数。(获取集合的大小) System.out.println(c.size()); //5.public boolean contains(0bject obj): 判断当前集合中是否包含给定的对象 System.out.println(c.contains("java1")); System.out.println(c.contains("Java1")); //6.public boolean remove(E e):把给定的对象在当前集合中删除:如果有相同的元素他会删除前面一个元素 System.out.println(c.remove("java1")); System.out.println(c); //7.public object[] toArray():把集合中的元素,存储到数组中。 Object[] arr = c.toArray(); System.out.println(Arrays.toString(arr));//可以用Arrays调用toString方法把数组打印出来 //非要把集合转为字符串数组怎么办: /** *用c调用toArray方法在括号里面new一个String类型的数组 * 在中括号里面可以填上元素的大小 * 这样就相当于指定了一个String类型的数组,也就是一个容器给到底层 * 底层就会把集合中的元素遍历出来给到数组 * 再去接她返回的结果就是一个String类型的数组返回给我们 * 这样就会得到指定类型的数组 */ String[] arr2 = c.toArray(new String [c.size()]); System.out.println(Arrays.toString(arr2)); System.out.println("--------------------------------------------------------"); //把一个集合的全部数据倒入到另一个集合中去 Collection c1 = new ArrayList(); c1.add("java1"); c1.add("java2"); Collection c2 = new ArrayList(); c2.add("java3"); c2.add("java4"); c1.addAll(c2);//就是把c2集合中的全部数据(拷贝了一份倒进去)倒入到c1中去,(相当于批量添加数据了)注意:数据类型要相适应 System.out.println(c1); System.out.println(c2);//c2的数据还是有的 } }
collection的遍历方式
1.迭代器(Iterator)
首先,一定要通过集合对象调用Iterator()方法,就会得到一个集合的迭代器对象,迭代器对象默认指向当前集合的第一个元素的;接着就可以用迭代器的常用方法来遍历集合。一个是hasNext()方法,一个是next()。
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class CollectionDemo1 { public static void main(String[] args) { Collection c = new ArrayList(); c.add("赵敏"); c.add("小邵"); c.add("速速"); c.add("灭绝"); System.out.println(c); //c = [赵敏, 小邵, 速速, 灭绝] // it //使用迭代去遍历集合 //1.从集合对象中获取迭代器对象。 Iterator it = c.iterator(); /*System.out.println(it.next()); System.out.println(it.next());//从取完第一个之后,再从第二个 System.out.println(it.next());//第三个 System.out.println(it.next());//第四个*/ //System.out.println(it.next());//第五个没有就会出现异常,所以不要越界 //2.应该使用循环结合迭代器遍历集合 while(it.hasNext()){//如果有数据就会返回true 进到循环里面来 String ele= it.next();//此时就使用next方法来取出数据,取出来之后会移到下一个位置 System.out.println(ele); //System.out.println(it.next()); } } }
2.增强for
如果使用for循环,那么这个集合就必须要支持索引的,但collection并没有规定结合的索引问题,只有List集合才支持索引。所以collection是不支持直接用for循环来遍历的。
import java.util.ArrayList; import java.util.Collection; public class CollectionDemo2 { public static void main(String[] args) { Collection c = new ArrayList(); c.add("赵敏"); c.add("小邵"); c.add("速速"); c.add("灭绝"); System.out.println(c); //c = [赵敏, 小邵, 速速, 灭绝] // ele //使用增强for循环遍历集合或者数组 for (String ele : c) { System.out.println(ele); } //c.for再回车 /*for (String els : c) { }*/ String[] names = {"的卡拉", "大法师", "北京人", "咖啡馆"}; for (String name : names){ System.out.println(name); } } }
3.Lambda表达式
import java.util.ArrayList; import java.util.Collection; import java.util.function.Consumer; public class CollectionDemo3 { public static void main(String[] args) { Collection c = new ArrayList(); c.add("赵敏"); c.add("小邵"); c.add("殷速速"); c.add("周芷若"); System.out.println(c); //c = [赵敏, 小邵, 殷速速, 周芷若] // s //default void forEach(Consumer
The End