Collection,ArrayList和LinkedList

1. Collection

Collection是一个接口 不能被实例化 但是jav中封装了实现类 可以借助多态来实现父类方法

add(E e);添加一个元素到集合末尾    返回值为Boolean
addAll(Collection<? extends E> c);将另一个集合添加到该集合中(Collection<? extends E> c 只有元素是E本类或者子类才能添加到该集合) 返回值为boolea
remove(Object obj);删除指定元素 返回值为boolean
removeAll(Collection<? extends E> c);删除交集
clear();清空 无返回值
size();查看集合元素个数 返回值为int
toArray();将集合转为object数组
contains(Object obj);集合中是否包含这个元素 返回值为Boolean
containsAll(Collection<? extends E> c);集合中是否包含另一个集合 子集合 返回值为Boolean
isEmpty();判断集合是否为空 返回值为Boolean

2. 集合中遍历的数据

2.1 for循环遍历

语法格式

for (int i = 0; i < 集合.size(); i++) {
   集合.get(i);
}
2.2 增强for循环

语法格式

for (集合数据类型 形参 : 集合) {
   集合。get(s);
}
2.3 迭代器

hasNext(); 判断一个集合中是否有下一个元素

next();会返回当前光标下面的元素 并把光标挪到下一元素的位置

Iterator iterator = list.iterator();
while (iterator.hasNext) {
   iterator.next();
}

3. 在集合中存在的是自定义的对象【重点】

package com.day16_w.e_HomeWork;

import java.util.ArrayList;
import java.util.List;

class Student {
   private String name;
   private int age;
   private char sex;

   @Override
   public String toString() {
       return "Student{" +
               "name='" + name + '\'' +
               ", age=" + age +
               ", sex=" + sex +
               '}';
  }

   public Student(String name, int age, char sex) {
       this.name = name;
       this.age = age;
       this.sex = sex;
  }
}

public class Demo2 {
   public static void main(String[] args) {
       List<Student> list = new ArrayList<>();
       list.add(new Student("张三", 15, '男'));
       list.add(new Student("李四", 16, '女'));
       list.add(new Student("王五", 14, '男'));
       list.add(new Student("马六", 18, '女'));
       for (int i = 0; i < list.size(); i++) {
           System.out.println(list.get(i));
      }

  }
}

4. List接口

List是Collection的子接口

void add(int index, E e);在指定的位置上插入一个元素
boolean addAll(int index, Collection<? extends E> e);将一个集合插入到另外一个集合的指定的位置
Collection删除的时候,通过元素来删除的。
remove(Object obj)
remove(int index);通过索引来删除指定的元素。返回的是被删除的元素 返回值为删除元素
set(int index, E e); 通过指定的索引修改数据元素,返回值是被修改的原数据 返回值为索引元素
indexOf(Object obj);通过元素获取指定的下标的 返回值为int
lastIndexOf(object obj);通过元素获取最后一次出现的元素的下标 返回值为int  
List<E> subList(int formIndex, int toIndex);截取一部分出来
package com.day16_w.b_List;

import java.util.ArrayList;
import java.util.List;

public class Demo1 {
   public static void main(String[] args) {
       List<String> list = new ArrayList<>();
       list.add("张三");
       list.add("李四");
       list.add("王五");
       list.add("张三");
       System.out.println(list);
       list.add(0, "马六");
       System.out.println(list);
       List<String> list1 = new ArrayList<>();
       list1.add("麻子");
       list1.add("赵四");
       list1.add("贝贝");
       list1.add("彩云");
       list.addAll(1,list1);
       System.out.println(list);
       list.set(3,"二贝");//贝贝
       System.out.println(list);
  }
}

5. 遍历List集合中的数据

5.1 for循环遍历

语法格式

for (int i = 0; i < 集合.size(); i++) {
   集合.get(i);
}
5.2 增强for循环

语法格式

for (集合数据类型 形参 : 集合) {
   集合。get(s);
}
5.3 迭代器

hasNext(); 判断一个集合中是否有下一个元素

next();会返回当前光标下面的元素 并把光标挪到下一元素的位置

Iterator iterator = list.iterator();
while (iterator.hasNext) {
   iterator.next();
}

6. 集合中存对象

package com.day16_w.e_HomeWork;

import java.util.ArrayList;
import java.util.List;

class Students {
   private String name;
   private String clbum;
   private double grade;

   public Students(String name, String clbum, double grade) {
       this.name = name;
       this.clbum = clbum;
       this.grade = grade;
  }

   public String getName() {
       return name;
  }

   public void setName(String name) {
       this.name = name;
  }

   public String getClbum() {
       return clbum;
  }

   public void setClbum(String clbum) {
       this.clbum = clbum;
  }

   public double getGrade() {
       return grade;
  }

   public void setGrade(double grade) {
       this.grade = grade;
  }
}

public class Demo6 {
   public static void main(String[] args) {
       List<Students> list = new ArrayList<>();
       list.add(new Students("小明","java2122",91.7));
       list.add(new Students("小花","java2122",89.4));
       list.add(new Students("小孙","java2122",96.5));
       for (int i = 0; i < list.size(); i++) {
           Students students = list.get(i);
           System.out.println("姓名:" + students.getName());
           System.out.println("班级:" + students.getClbum());
           System.out.println("成绩:" + students.getGrade());
      }
  }
}

7. ArrayList【开发主用】

ArrayList 底层是数组

特点:查询快 增删慢

默认容量为10 如果元素超过10扩容则直接扩大1.5倍

ArrayList list = new ArrayList();

8. LinkedList

双链表

特点:查询慢 增删快

LinkedList list = new LinkedList();

9. ArrayList和LinkedList和Vector的区别

ArrayList和Vector 底层是数组,但是Vector是线程安全的,所以效率底,开发中不用Vector
接下来介绍ArrayList和linkedListu区别:
1.ArrayList底层是数组
LinkedList底层是双向链表
2.ArrayList 的特征:
查询快: 底层是索引,有序的通过内存有序地址,直接找到 时间复杂度 o(1)
增删慢: 增加数据和删除数据有可能扩容。每次扩1.5倍。扩容的话,浪费内存浪费时间o(n)
3.LinkedList的特征:
查询慢:底层是二分法查找的算法 时间复杂度是log以2为底 n的对数
增删快:直接找前置结点 Node prev,后继结点 Node next
。时间复杂度是 o(1)
所以开发时候的用ArrayList
后续还要学习ArrayList的源码
 
posted @ 2022-08-02 21:32  早睡晚起身体好  阅读(44)  评论(0)    收藏  举报