是一个长度可变且可以存储多个数(对象)据的容器
Collection<E>是集合的顶级接口
<E>是泛型 用于指定集合元素的数据类型,由于我们泛型的指定所以只能是引用类型
int[] arr;arr的数据类型是数组类型,arr的元素是int类型
Collection<String>c; c的数据类型是引用类型,c中的元素是String类型。
集合存储基本类型数据 1 2 4 可以自动封装成包装类 Integer in=1; in可以存储在集合中
1.Collection<E>是集合的顶级接口
//创建集合对象 Collection<String> c=new ArrayList<String>(); //添加元素 c.add("徐"); c.add("love"); c.add("李"); //输出集合 System.out.println(c); //[徐, love, 李] //删除元素 c.remove("李"); //没有要删除的元素就什么都不做 c.remove("火"); System.out.println(c); //[徐, love] //清空集合 //c.clear(); //判断元素是否包含在集合元素中 System.out.println(c.contains("徐")); //true //判断集合中元素是否为空 System.out.println(c.isEmpty()); //集合元素的个数 System.out.println(c.size()); //返回包含此集合中所有元素的数组。返回类型是object、 Object[] os=c.toArray(); //在转换的过程中指明要转换的数组元素的类型 String[] ss=c.toArray(new String[2]);
我们要谈collection下的三个子接口 list set queue
2.List(列表)是一个接口,需要实现类来实现
特征:1.存入数据有序 2.可以根据下标操作添加元素
//创建list集合对象 List<String> l=new ArrayList<String>(); //添加元素 l.add("a"); l.add("a3"); l.add("a2"); l.add("a02"); System.out.println(l);//[a, a3, a2, a02] //根据下标插入元素 l.add(3,"b"); System.out.println(l);//[a, a3, a2, b, a02] //可以根据元素也可以根据下标删除元素 l.remove(0); System.out.println(l);//[a3, a2, b, a02] //根据下标返回元素 System.out.println(l.get(1)); //a2 //返回指定元素第一次出现的下标值,如果没找到就返回-1 System.out.println(l.indexOf("a2")); //1 l.set(0,"123");//用指定元素替换此列表中指定位置的元素 System.out.println(l);//[123, a2, b, a02] List<String> l2=l.subList(1, 3); System.out.println(l2);
实现类:ArrayList,LinkedList,Vector,Stack
(1)ArrayList():有序表底层由数组来实现的,默认数组的初始长度是10,根据底层右移运算进行扩容,每次在原来的基础上扩容一半
private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; //elementData是底层创建的数组 int newCapacity = oldCapacity + (oldCapacity >> 1); //右移操作是除2 if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity); }