Java零基础学习(对象数组 集合 数据结构)

Java零基础学习(对象数组 集合 数据结构)

  • 对象数组的概述和使用

    需求
    	有三个学生,请把这三个学生的信息存储到数组中,并遍历数组,获取得到每一个学生的信息
    		学生 Student
    			成员变量 name age
    			构造方法 无参 有参
    			成员方法 getXxx() setXxx()
    			存储学生的数组
    public class MyTest {
        public static void main(String[] args) {
            Student[] students = new Student[3];
            Student student = new Student(13,"李雷");
            Student student1 = new Student(15,"小明");
            Student student2 = new Student(15, "李亮");
            students[0]=student;
            students[1]=student1;
            students[2]=student2;
            for (int i=0;i<students.length;i++){
                System.out.println(students[i]);
            }
        }
    }
    
  • 集合的由来以及继承体系

    1.由来
    	面向对象语言对事物的体现都是以对象的形式,所以为了方便多个对象操作,Java就提供了集合类
    2.数组和集合的区别
    	a.长度区别
    		数组的长度是固定的而集合的长度是可变的
    	b.存储数据类型的区别
    		数组可以存储基本数据类型,也可以存储引用数据类型;
    		而集合只能存储引用数据类型
    	c.内容区别
    		数组只能存储同种数据类型元素,集合可以存储不同种数据类型元素
    
    集合继承体系图

    • Collection集合的功能概述
    1.添加功能
    	boolean add(Object obj) 添加一个元素
    	boolean addAll(Collection c) 添加一个集合的元素 (给一个集合添加进另一个集合的所有元素)
    2.删除功能
    	void clear() 移除所有元素
    	boolean remove(object o) 移除一个元素 
    	boolean removeAll(Collection c) 移除一个集合元素(如果移除就返回true)移除的元素是两个集合的交集元素
    	如果没有交集元素就返回false
    3.判断功能
    	boolean contains(Object o) 判断集合中是否包含指定元素
    	boolean containsAll(Collection c) 判断集合中是否包含指定集合元素(包含指定集合所有元素才行)
    	boolean isEmpty() 判断集合是否为空
    4.获取功能
    	Iterator<E> iterator() (重点)
    5.长度功能
    	int size() 获取元素的个数
    6.交集功能
    	//A集合对B集合取交集,获取到的交集元素放到A集合里面,返回的boolean表示A集合是否发生变化
    	//A集合对B集合取交集元素,如果没有交集元素A集合会被清空
    	boolean retainAll(Collection c) 获取两个集合的交集元素
    7.把集合转换为数组
    	Object[] toArray()
    
    • 集合的遍历
    1.将集合转换成数组遍历
    public class MyTest {
        public static void main(String[] args) {
            Collection list = new ArrayList();
            list.add(new Student(15, "李明"));
            list.add(new Student(16, "李亮"));
            list.add(new Student(15, "张强"));
            Object[] objects = list.toArray();
            for (int i=0;i<objects.length;i++){
                Student student=(Student)objects[i];
                System.out.println(student);
            }
    	}
    }
    2.使用迭代器遍历
    public class MyTest {
        public static void main(String[] args) {
            Collection list = new ArrayList();
            list.add(new Student(15, "李明"));
            list.add(new Student(16, "李亮"));
            list.add(new Student(15, "张强"));
            Iterator iterator = list.iterator();
            while (iterator.hasNext()){
                System.out.println(iterator.next().toString());
            }
        }
    }
    
    • 迭代器的原理及源码解析
    迭代器为什么不定义成一个类,而是定义成一个接口
    	因为Java提供了很多的集合类,这些集合类的数据结构是不同的,所以存储方式和遍历方式应该是不同的,所以就没有定义迭代器类,而且Java是单继承,并且,集合类应该具备获取元素的操作,所以就没有定义迭代器类,真正具体的实现类是在内部类中
    
  • List的概述及特点

    元素有序,并且每个元素都存在一个索引,元素可以重复
    
    • List集合存储学生对象并遍历
    List集合存储学生对象并遍历
    	迭代器的方式
    public class MyTest {
        public static void main(String[] args) {
            List list = new ArrayList();
            list.add(new Student(15, "李明"));
            list.add(new Student(16, "李亮"));
            list.add(new Student(15, "张强"));
            Iterator iterator = list.iterator();
            while (iterator.hasNext()){
                System.out.println(iterator.next().toString());
            }
        }
    }
    
    • List的特有功能
    void add(int index,E element)
    	在指定索引处添加元素
    E remove(int index)
    	移除指定索引处的元素 返回的是移除的元素
    E get(int index)
    	获取指定位置的元素
    E set(int index,E element)
    	更改指定索引处的元素 返回的是被替换的元素
    int indexOf(Object obj)
    	返回此列表中第一次出现的指定元素的索引 如果此列表不包含此元素就返回-1
    int lastIndexof(Object obj)
    	返回此列表中最后出现指定元素的索引 如果列表补包含此元素就返回-1
    
    • List集合的特有遍历功能
    使用for循环通过size()和get()方法结合使用遍历
    import java.util.*;
    public class MyTest {
        public static void main(String[] args) {
            List list = new ArrayList();
            list.add(new Student(15, "李明"));
            list.add(new Student(16, "李亮"));
            list.add(new Student(15, "张强"));
            for (int i=0;i<list.size();i++){
                System.out.println(list.get(i));
            }
        }
    }
    
    • ListIterator的特有功能
    ListIterator 继承自Iterator  可以使用Iterator中的方法
    	1.ListIterator的特有功能
    		boolean hasPrevious():			是否存在前一个元素
    		E previous():					返回列表中的前一个元素
    		以上两个方法可以实现反向遍历 但是注意 要完成反向遍历之前 要先进行正向遍历  这样指针才能移到最后
    		如果直接反向遍历是没有效果的  因为指针默认位置就在最前面 他前面没有元素
    	2.案例演示:	ListIterator的特有功能
    	public class MyTest {
        public static void main(String[] args) {
            List list = new ArrayList();
            list.add(new Student(15, "李明"));
            list.add(new Student(16, "李亮"));
            list.add(new Student(15, "张强"));
            ListIterator listIterator = list.listIterator();
            while (listIterator.hasNext()){
                System.out.println(listIterator.next());
            }
            System.out.println("========================");
            while (listIterator.hasPrevious()){
                System.out.println(listIterator.previous());
            }
        }
    }
    
    
    • 并发修改异常产生的原因及解决方案
    1.案例演示
    	需求:我有一个集合,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。
    2.ConcurrentModificationException出现
    	我们用Iterator这个迭代器遍历采用hasNext方法和next方法,集合修改集合 会出现并发修改异常
    	原因是我们的迭代依赖与集合 当我们往集合中添加好了元素之后 获取迭代器  那么迭代器已经知道了集合的元素个数
    	这个时候你在遍历的时候又突然想给 集合里面加一个元素(用的是集合的add方法) 那迭代器不同意 就报错了
    C:解决方案 我们用ListIterator迭代器遍历 用迭代器自带的add方法添加元素 那就不会报错了
    	a:迭代器迭代元素,迭代器修改元素(ListIterator的特有功能add)
    	b:集合遍历元素,集合修改元素
    	c.使用for循环遍历集合添加元素就不会报错
    
    • 数据结构之栈队列
    1.数据结构概述及常见数据结构
    	数据结构其实就是存储数据的格式
    	分类:	栈 , 队列 , 数组 , 链表 , 树 , 哈希表 图
    2.栈特点: 	先进后出 弹夹
    
    3.队列: 	先进先出
    
    • 数据结构之数组和链表
    1.数组的特点
    	查询快 增删慢
    2.链表特点
    	查询慢 增删快
    
    • List的三个子类的特点
    1.List的三个子类的特点
    	ArrayList:
    		底层数据结构是数组,查询快,增删慢。
    		线程不安全,效率高。
    	Vector:
    		底层数据结构是数组,查询快,增删慢。
    		线程安全,效率低。
    	LinkedList:
    		底层数据结构是链表,查询慢,增删快。
    		线程不安全,效率高。
    2.什么时候使用这三个字类
    	程序是否需要考虑线程安全
    		是:Vector
    		否:是增删多还是查找多
    			查找多:ArrayList
    			增删多:LinkedList
    
posted @ 2021-05-28 18:51  Jack+_+  阅读(94)  评论(0)    收藏  举报