黑马程序员技术交流社区

标题: 【石家庄校区】day05学习总结 [打印本页]

作者: 段孟钊    时间: 2019-5-7 14:52
标题: 【石家庄校区】day05学习总结
本帖最后由 小石姐姐 于 2019-5-9 18:31 编辑

个人笔记一、集合体系结构
​                                                                        集合
​                Collection(单列集合)                                                                        Map(双列集合)
​                                                                                                                        HashMap
​        List(可重复数据单列集合)                Set(不可重复数据单列集合)                        
ArrayList        LinkedList        HashSet                TreeSet
二、Collection集合概述和使用
1.概述
是单列集合的顶层接口,它表示一组对象,这些对象也称为Collection元素        
JDK不提供此接口的直接实现类,它提供更具体的子接口(Set和List)
2.基本使用方法
[Java] 纯文本查看 复制代码
Collection<String> c = new ArrayList<String>(); //<>不写的话,可以添加任意类型元素
c.add("aaa");//添加集合元素
三、Collection集合常用方法  
[Java] 纯文本查看 复制代码
Collection<String> c = new ArrayList<String>();
  c.add("aaa");//添加集合元素
  c.add("bbb");
  c.add("ccc");
  System.out.println(c);
  System.out.println(c.remove("bbb"));//删除集合中的指定元素,返回true
  System.out.println(c.remove("ddd"));//删除集合中的指定元素,返回false
  System.out.println(c.contains("aaa"));//判断集合中是否存在指定元素,返回true
  System.out.println(c.contains("ddd");//判断集合中是否存在指定元素,返回false
  System.out.println(c.isEmpty());//判断集合是否为空,有元素则返回true,否则返回false
  System.out.println(c.size());//获取集合长度
  c.clear();//清空集合中的所有元素

四、Collection集合的遍历  
  
[Java] 纯文本查看 复制代码
/*
  遍历Collection集合的重要步骤
       1.通过集合对象获取迭代器对象
       2.使用循环和hasNext()方法来控制是否还有元素
       3.循环内通过next()方法获取元素
  */
  //创建集合对象
  Collection<String> c = new ArrayList<>();
  //添加元素
  c.add("aaa");
  c.add("bbb");
  c.add("ccc");
  //通过集合对象获取迭代器对象
  Iterator it = c.iterator();
  //使用循环和hasNext()方法来控制是否还有元素
  while(it.hasNext()){
      String s = it.next();
      System.out.println(s);
  }

五、集合使用步骤图解
六、Collection集合存储学生对象并遍历
[Java] 纯文本查看 复制代码
public class Student{
      private String name;
      private int age;
      public Student(){}
      public Student(String name, int age){
          this.name = name;
          this.age = age;
      }
      public void setName(String name){
          this.name = name;
      }
      public String getName(){
          return name;
      }
      public void setAge(int age){
          this.age = age;
      }
      public String getAge(){
          return age;
      }
  }
  ​
  public class Test{
      public static void main(String[] args){
          //创建Collection集合对象
          Collection<Student> c = new ArrayList<>();
          //创建学生对象
          Student s1 = new Student("张三",21);
          Student s2 = new Student("李四",22);
          Student s3 = new Student("王五",23);
          //添加学生信息到集合里
          c.add(s1);
          c.add(s2);
          c.add(s3);
          //获取迭代器Iterator的实现类对象
          Iterator<Student> it = c.iterator();
          //使用迭代器遍历集合Collection
          while(it.hasNext()){
              Student s = it.next();
              System.out.println(s.getName +", "+s.getAge);
          }
      }
  }

七、List集合概述和特点
1.List集合是单列集合体系之一     
2.List集合及其实现类全部有索引      
3.List集合及其实现类全部可以存储重复元素
4.List集合及其实现类全部元素存取有序
八、List集合的特有方法  
  
[Java] 纯文本查看 复制代码
//定义List集合对象
  List<String> list = new ArrayList<>();
  list.add("aaa");
  list.add("bbb");
  list.add("ccc");
  //System.out.println(list.add(1,"ddd"));//添加指定索引的指定元素到集合中,返回true,输出:aaa ddd bbb ccc
  //System.out.println(list.get(1));//获取指定索引对应的元素 输出:bbb
  //System.out.println(list.remove(1));//删除指定索引对应的元素,并且返回该值 输出:bbb
  //System.out.println(list.set(1,"ddd"));//修改指定索引的指定元素到集合中,并且返回该值 输出:bbb
  System.out.println(list);

  ​九、List集合存储学生对象并遍历  
  
[Java] 纯文本查看 复制代码
public class Test{
      public static void main(String[] args){
          //定义List集合对象,多态
          List<Student> list = new ArrayList<>();
          //创建学生对象
          Student s1 = new Student("张三",21);
          Student s2 = new Student("李四",22);
          Student s3 = new Student("王五",23);
          //添加学生信息到集合里
          list.add(s1);
          list.add(s2);
          list.add(s3);
          //获取迭代器Iterator的实现类对象
          Iterator<Student> it = list.iterator();
          //使用迭代器遍历集合List
          while(it.hasNext()){
              Student s = it.next();
              System.out.println(s.getName+", "+s.getAge);
          }
          //使用for循环遍历集合List
          for(int i = 0; i< list.size(); i++){
              Student s = list.get(i);
              System.out.println(s.getName+", "+s.getAge);
          }
      }
  }

十、并发修改异常并发修改异常出现的原因
在迭代器遍历集合过程中,通过集合的自身方法对集合进行了操作。
导致了迭代器预期次数和实际次数不一致,就会出现并发修改异常
并发修改异常解决的方式
可以使用普通for循环来遍历集合,再对集合进行修改
十一、列表迭代器
[Java] 纯文本查看 复制代码
//List集合特有的迭代器:他可以把Iterator中的并发异常给处理好     
//1.通过集合对象的listiterator()方法获取一个ListIterator迭代器对象
List<String> list = new ArrayList<>();
ListIterator listIt = list.listIterator();
//2.通过调用hasNext()方法判断是否有下一个元素
listIt.hasNext();
//3.通过调用next()方法获取元素
listIt,next();     
//4.可以通过ListIterator迭代器中的方法对集合进行操作
while(listIt.hasNext()){
​        String s = listIt.next();
​        System.out.println(s);
​        if(s.equal("aaa")){
​                listIt.add("bbb");
​        }
}
//特有功能:
hasPrevious();//从后往前判断是否还有元素,
previous();//获取从后往前的第一个元素
十二、增强for循环
[Java] 纯文本查看 复制代码
/*语法格式:
for(数据类型 变量名  :  数组或者集合引用名){
​                循环体;
}*/
  
  int[] arr = {1,2,3,4,5};
  for(int i : arr){
      System.out.println(i);//1 2 3 4 5
  }
  String[] strArr = {"aaa","bbb","ccc"};
  for(String s : strArr){
      System.out.println(s);// aaa bbb ccc
  }
  List<String> list = new ArrayList<Stirng>();
  list.add("111");
  list.add("222");
  list.add("333");
  for(String s : list){
      System.out.println(s);// 111 222 333
  }
十三、List集合存储学生对象三种方式遍历  
  
[Java] 纯文本查看 复制代码
import java.util.ArrayList;
  import java.util.Iterator;
  import java.util.List;
  ​
  public class StudentTest2 {
      public static void main(String[] args) {
          //创建集合对象
          List<Student> list = new ArrayList<Student>();
          //创建学生对象
          Student s1 = new Student("张三",21);
          Student s2 = new Student("李四",22);
          Student s3 = new Student("王五",23);
          //添加学生对象到集合里
          list.add(s1);
          list.add(s2);
          list.add(s3);
          //遍历集合输出学生信息
          //方式1:Iterator迭代器遍历
          Iterator<Student> it = list.iterator();
          while(it.hasNext()){
              Student s = it.next();
              System.out.println(s);
          }
          System.out.println("========");
          //方式2:for循环遍历
          for (int i = 0; i < list.size(); i++) {
              Student s = list.get(i);
              System.out.println(s);
          }
          System.out.println("========");
          //方式3:增强for循环遍历
          for (Student s : list){
              System.out.println(s);
          }
      }
  }

十四、数据结构之栈和队列
栈的过程描述:先进后出,或者后进先出
队列的过程描述:先进先出
十五、数据结构之数组和链表
数组:查找快,增删慢----ArrayList
链表:增删快,查找慢----LinkedList
十六、List集合子类的特点
ArrayList集合:底层是数组实现,查询快、增删慢     
LinkedList集合:底层是链表实现,查询慢、增删快
十七、ArrayList集合存储学生对象三种方式遍历  
  
[Java] 纯文本查看 复制代码
public class ArrayListTest{
      public static void main(String[] args){
          //创建ArrayList对象
          ArrayList<Student> array = new ArrayList<>();
          //创建学生对象
          Student s1 = new Student("张三",21);
          Student s2 = new Student("李四",22);
          Student s3 = new Student("王五",23);
          //添加元素
          array.add(s1);
          array.add(s2);
          array.add(s3);
          //方式1:迭代器Iterator遍历集合
          Iterator<Student> it = array.iterator();
          while(it.hasNext()){
              Student s = it.next();
              System.out.println(s);
          }
          //方式2:for循环遍历集合
          for(int i = 0; i< array.size();i++){
              Student s = array.get(i);
              System.out.println(s);
          }
          //方式3:增强for循环遍历集合
          for(Student s : array){
              System.out.println(s);
          }
      }
  }

十八、LinkedList集合存储学生对象的三种方式遍历  
[Java] 纯文本查看 复制代码
 //创建LinkedList集合对象
  LinkedList<Student> ll = new LinkedList<>();
  //创建学生对象
  Student s1 = new Student("张三",21);
  Student s2 = new Student("李四",22);
  Student s3 = new Student("王五",23);
  //添加元素
  ll.add(s1);
  ll.add(s2);
  ll.add(s3);
  //方式1:迭代器Iterator遍历集合
          Iterator<Student> it = ll.iterator();
          while(it.hasNext()){
              Student s = it.next();
              System.out.println(s);
          }
          //方式2:for循环遍历集合
          for(int i = 0; i< ll.size();i++){
              Student s = ll.get(i);
              System.out.println(s);
          }
          //方式3:增强for循环遍历集合
          for(Student s : ll){
              System.out.println(s);
          }

十九、LinkedList集合的特有功能  
  
[Java] 纯文本查看 复制代码
/*
      void addFirst(E e)      向集合中第一个位置添加元素
        void addLast(E e)      向集合中最后一个位置添加元素
        E getFirst()                获取集合中第一个元素
        E getLast()                获取集合中最后一个元素
        E removeFirst()          删除集合中第一个元素
        E removeLast()          删除集合中最后一个元素
  */
  LinkedList<String> ll = new LinkedList<>();
  ll.addFrist("aaa");// aaa
  ll.addLast("ccc");// aaa  ccc
  ll.removeFrist();//ccc
  ll.removeLast();//[]
  ll.getFrist();//aaa
  ll.getLast();//ccc
  System.out.println(ll);//[aaa ccc]








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2