Collection,ArrayList和LinkedList
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;
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的源码