1. 集合体系结构
1.1 集合体系结构介绍
1.2 Collection 的使用
package com.itheima.domain;
import java.util.Objects;
public class Student {
private String name;
private int age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age && Objects.equals(name, student.name);
}
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "Student{name = " + name + ", age = " + age + "}";
}
}
package com.itheima.collection;
import com.itheima.domain.Student;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest1 {
/*
Collection的常用方法:
public boolean add(E e) : 把给定的对象添加到当前集合中
public void clear() : 清空集合中所有的元素
public boolean remove(E e) : 把给定的对象在当前集合中删除
public boolean contains(object obj) : 判断当前集合中是否包含给定的对象
public boolean isEmpty() : 判断当前集合是否为空
pubic int size() : 返回集合中元素的个数(集合的长度)
*/
public static void main(String[] args) {
Collection<Student> c = new ArrayList<>();
c.add(new Student("张三", 23));
c.add(new Student("李四", 24));
c.add(new Student("王五", 25));
System.out.println(c.contains(new Student("李四", 24)));
System.out.println(c);
}
private static void method() {
// 以多态的形式创建集合对象, 调用单列集合中的共有方法
Collection<String> c = new ArrayList<>();
c.add("张三");
c.add("李四");
c.add("王五");
boolean b = c.contains("李四");
System.out.println(b);
System.out.println(c.size());
}
}
2. 集合的通用遍历方式
2.1 迭代器遍历
2.2 增强 for 循环
package com.itheima.collection;
import com.itheima.domain.Student;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.NoSuchElementException;
public class CollectionTest2 {
/*
public Iterator<E> iterator() : 获取遍历集合的迭代器
public E next() : 从集合中获取一个元素
public boolean hasNext() : 如果仍有元素可以迭代,则返回 true
注意: 如果next()方法调用次数过多, 会出现NoSuchElementException
*/
public static void main(String[] args) {
Collection<Student> c = new ArrayList<>();
c.add(new Student("张三", 23));
c.add(new Student("李四", 24));
c.add(new Student("王五", 25));
// 1. 获取迭代器 (左边是接口的引用, 右边返回的是实现类对象)
Iterator<Student> it = c.iterator();
// 2. 循环判断, 集合中是否还有元素
while(it.hasNext()){
// 3. 调用next方法, 将元素取出
Student stu = it.next();
System.out.println(stu.getName() + "---" + stu.getAge());
}
System.out.println("----------------------");
// 使用增强for循环遍历集合
for (Student stu : c) {
System.out.println(stu);
}
}
}
2.3 foreach 方法
package com.itheima.collection;
import com.itheima.domain.Student;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.function.Consumer;
public class CollectionTest2 {
/*
public Iterator<E> iterator() : 获取遍历集合的迭代器
public E next() : 从集合中获取一个元素
public boolean hasNext() : 如果仍有元素可以迭代,则返回 true
注意: 如果next()方法调用次数过多, 会出现NoSuchElementException
*/
public static void main(String[] args) {
Collection<Student> c = new ArrayList<>();
c.add(new Student("张三", 23));
c.add(new Student("李四", 24));
c.add(new Student("王五", 25));
// 1. 获取迭代器 (左边是接口的引用, 右边返回的是实现类对象)
Iterator<Student> it = c.iterator();
// 2. 循环判断, 集合中是否还有元素
while(it.hasNext()){
// 3. 调用next方法, 将元素取出
Student stu = it.next();
System.out.println(stu.getName() + "---" + stu.getAge());
}
System.out.println("----------------------");
// 使用增强for循环遍历集合
for (Student stu : c) {
System.out.println(stu);
}
System.out.println("-----------------------");
//foreach方法遍历集合
c.forEach(stu -> System.out.println(stu));
}
}
3. List集合
package com.itheima.collection.list;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class ListDemo3 {
/*
并发修改异常 : ConcurrentModificationException
场景: 使用[迭代器]遍历集合的过程中, 调用了[集合对象]的添加, 删除方法, 就会出现此异常
解决方案: 迭代器的遍历过程中, 不允许使用集合对象的添加或删除, 那就使用迭代器, 自己的添加或删除方法.
删除方法 : 普通的迭代器有
添加方法 : 普通迭代器没有, 需要使用List集合特有的迭代器
*/
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("眼瞅着你...");
list.add("温油");
list.add("离开俺们这...");
list.add("伤心的人别扭秧歌...");
list.add("私奔到东北...");
ListIterator<String> it = list.listIterator();
while(it.hasNext()){
String s = it.next();
if("温油".equals(s)){
it.add("哈哈");
}
}
System.out.println(list);
}
}
4. 数据结构-ArrayLiat-LinkedList
4.1 数据结构介绍
4.2 ArrayList类和LinkedList类
4.2.1 ArrayList类
添加方法源码剖析:
"数值 m >> 1": 意思是数值m向右移动一位, 相当于m/2, 如 : 8 >> 1 = 4.
4.2.2 LinkedList 类
package com.itheima.collection.list;
import java.util.LinkedList;
public class LinkedListDemo {
/*
LinkedList 特有方法 :
public void addFirst(E e) : 头部添加
public void addLast(E e) : 尾部添加
public E getFirst() : 获取第一个
public E getLast() : 获取最后一个
public E removeFirst() : 删除第一个
public E removeLast() : 删除最后一个
*/
/*
LinkedList集合, 底层是双向链表结构, 查找元素的时候会从头, 或者尾部逐步查找
但是它属于List系统中的集合, 也可以使用get方法, 根据索引直接获取元素.
*/
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("张三");
list.add("李四");
list.add("王五");
String s = list.get(1);
System.out.println(s);
}
private static void method2() {
LinkedList<String> list = new LinkedList<>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六");
System.out.println(list.getFirst());
System.out.println(list.getLast());
list.removeFirst();
list.removeLast();
System.out.println(list);
}
private static void method1() {
LinkedList<String> list = new LinkedList<>();
list.addFirst("张三");
list.addFirst("李四");
list.addFirst("王五");
list.addFirst("赵六");
System.out.println(list);
}
}