集合体系结构List系列添加元素是有序(存取顺序一致)可重复有索引Set系列添加元素无序不重复无索引Collectioncollection是单列集合的祖宗接口其功能是全部单列集合都可继承使用的collection常用方法import java.util.ArrayList; import java.util.Collection; public class Test { static void main(String[] args) { /* collection:Link(ArrayList、LinkedList)、Set(HashSet、TreeSet) collection常用方法 public boolean add(E e)添加 public void clear()清空 public boolean remove(E e)删除 public boolean contains(E e)判断是否包含 public boolean isEmpty()判断是否为空 public int size()获取元素个数 collection是一个接口无法创建它的对象只能创建它实现类的对象如ArrayList */ //多态 创建对象 CollectionInteger collnew ArrayList(); //添加元素 //如果向List集合中添加数据方法永远返回trueList系列允许元素重复 //Set集合中添加数据如果当前要添加的元素不存在返回true否则返回false coll.add(100); //清空 coll.clear(); //判断是否为空 System.out.println(coll.isEmpty()); //删除 //删除成功返回true,若要删除的元素不存在会删除失败返回false coll.add(100); coll.add(100); System.out.println(coll.remove(100)); //判断是否包含 //底层是通过equals方法判断是否包含 //如果要判断的元素是自定义类型需要重写equals方法 System.out.println(coll.contains(100)); } }public class Student { String name; int age; public Student(String name,int age){ this.namename; this.ageage; } //重写equals方法 Override public boolean equals(Object obj) { if(thisobj){ return true; } if(obj instanceof Student){ Student stu(Student)obj; if(this.name.equals(stu.name)this.agestu.age){ return true; } } return false; } } import java.util.ArrayList; import java.util.Collection; public class demo1 { static void main() { CollectionStudent collnew ArrayList(); //创建三个学生对象 Student stu1new Student(张三,18); Student stu2new Student(李四,19); Student stu3new Student(王五,20); //将学生对象添加到集合中 coll.add(stu1); coll.add(stu2); coll.add(stu3); //如果同名同年龄判定为同一个学生需要在Student类中重写equals Student stu4new Student(张三,18); System.out.println(coll.contains(stu4));//true } }集合的遍历迭代器遍历IteratorE iterator(): 获取一个迭代器boolean hasNext(): 判断当前位置是否有元素可以被取出E next(): 获取当前位置的元素,将迭代器对象移向下一个索引位置void remove(): 删除迭代器对象当前指向的元素import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class demo1 { static void main() { /* 迭代器遍历 IteratorE iterator():获取一个迭代器 boolean hasNext():判断当前指向的位置是否有元素 E next():获取当前指向的元素并将迭代器指向后一个位置 迭代器的细节注意点 1.报错NoSuchElementException 2.迭代器遍历完毕指针不会复位 3.循环中只能用一次next方法 4.迭代器遍历时不能用集合的方法进行增加或者删除 如果我实在要删除那么可以用迭代器提供的remove方法进行删除 void remove(): 删除迭代器对象当前指向的元素 */ //1.创建集合并添加元素 CollectionString collnew ArrayList(); coll.add(aaa); coll.add(bbb); coll.add(ccc); coll.add(ddd); //2.获取迭代器默认指向集合的0索引处 IteratorString itcoll.iterator(); //3.使用循环遍历集合 while(it.hasNext()){ String strit.next(); System.out.println(str); } //当上面循环结束之后迭代器的指针已经指向了最后没有元素的位置 //System.out.println(it.next());//NoSuchElementException //迭代器遍历完毕指针不会复位 System.out.println(it.hasNext());//false //如果我们要继续第二次遍历集合只能再次获取一个新的迭代器对象 IteratorString it2 coll.iterator(); while(it2.hasNext()) { String str it2.next(); System.out.println(str); } //迭代器删除元素 IteratorString it3 coll.iterator(); while(it3.hasNext()){ String strit3.next(); if(str.equals(ccc)){ it3.remove(); } } System.out.println(coll); } }迭代器源码分析增强for所有单列集合和数组才能用增强for遍历public class MyCollectonDemo1 { public static void main(String[] args) { ArrayListString list new ArrayList(); list.add(a); list.add(b); list.add(c); list.add(d); list.add(e); list.add(f); //1,数据类型一定是集合或者数组中元素的类型 //2,str仅仅是一个变量名而已,在循环的过程中,依次表示集合或者数组中的每一个元素 //3,list就是要遍历的集合或者数组 for(String str : list){ System.out.println(str); } } }lambda表达式public class A07_CollectionDemo7 { public static void main(String[] args) { /* lambda表达式遍历 default void forEach(Consumer? super T action): */ //1.创建集合并添加元素 CollectionString coll new ArrayList(); coll.add(zhangsan); coll.add(lisi); coll.add(wangwu); //2.利用匿名内部类的形式 //底层原理 //其实也会自己遍历集合依次得到每一个元素 //把得到的每一个元素传递给下面的accept方法 //s依次表示集合中的每一个数据 /* coll.forEach(new ConsumerString() { Override public void accept(String s) { System.out.println(s); } });*/ //lambda表达式 coll.forEach(s - System.out.println(s)); } }List方法介绍方法名描述void add(int index,E element)在此集合中的指定位置插入指定的元素E remove(int index)删除指定索引处的元素返回被删除的元素E set(int index,E element)修改指定索引处的元素返回被修改的元素E get(int index)返回指定索引处的元素import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; public class demo1 { static void main() { /* List系列集合独有方法 void add(int index,E e):在指定索引位置添加元素原来处元素依次后移 E get(int index):获取指定索引位置的元素 E remove(int index):删除指定索引位置的元素 E set(int index,E e):将指定索引位置的元素替换为新元素,返回被修改的元素 */ //1.创建一个集合 ListString listnew ArrayList(); //2.添加元素 list.add(a); list.add(b); list.add(c); //指定位置插入元素 list.add(1,Q); //删除指定索引位置的元素 list.remove(2); //set方法将指定索引位置的元素替换为新元素 list.set(1,W); //get方法获取指定索引位置的元素 System.out.println(list.get(1));//W } }两个删除方法import java.util.ArrayList; import java.util.Collection; import java.util.List; public class Test { static void main(String[] args) { /* List系列集合中两个删除方法 1.collection中直接删除元素public boolean remove(E e)删除指定元素 2.List通过索引删除元素E remove(int index):删除指定索引位置的元素 */ ListInteger listnew ArrayList(); list.add(1); list.add(2); list.add(3); //此时删除的是索引为1的元素2 //因为再调用方法的时候如果出现了重载优先调用实参和形参类型一致的方法 //1是int型对应List的remove(int index)方法 list.remove(1); //删除元素为1需要手动装箱 list.remove(Integer.valueOf(1)); } }列表迭代器ListIteratorE//获取一个列表迭代器的对象里面的指针默认也是指向0索引的 //相比迭代器额外添加了一个方法在遍历的过程中可以添加元素 ListIteratorString it list.listIterator(); while(it.hasNext()){ String str it.next(); if(bbb.equals(str)){ //qqq it.add(qqq); } } System.out.println(list);遍历过程中需要删除选迭代器添加元素选列表迭代器像操作索引选普通forArrayList1. 创建ArrayList对象的时候他在底层先创建了一个长度为0的数组。2. 添加第一个元素时底层会创建一个新的长度为10数值为null的数组数组名字elementDate定义变量size0。size这个变量有两层含义①元素的个数也就是集合的长度②下一个元素的存入位置添加元素添加完毕后size3.存满时会扩容1.5倍4.如果一次添加多个元素1.5倍还放不下则新创建数组的长度以实际为准扩容为101.5倍扩容/实际为准LinkedList底层是双链表结构查询慢增删快操作首尾元素快刚开始创建的时候底层创建了两个变量一个记录头结点first一个记录尾结点last默认为null添加第一个元素时底层创建一个结点对象first和last都记录这个结点的地址值添加第二个元素时底层创建一个结点对象第一个结点会记录第二个结点的地址值last会记录新结点的地址值