Java之对象数组,集合以及数据结构

1. 集合框架

1.1数组的概述和使用

需求:

我有3个学生,请把这个3个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息。

学生:Student
            成员变量:name,age
            构造方法:无参,带参
            成员方法:getXxx()/setXxx()

public class Student {
    private String name;
    private int age;

    public Student() {
    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + 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);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}
public class MyTest1 {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add(new Student("张三",232));
        list.add(new Student("张三", 232));
        list.add(new Student("张三", 23));
        list.add(new Student("张三2", 23));
        list.add(new Student("张三3", 23));
        list.add(new Student("张三5", 23));
        list.add(new Student("张三", 23));
        list.add(new Student("张三", 23));
        list.add(new Student("张三4", 23));
        list.add(new Student("张三7", 23));
        list.add(new Student("张三5", 23));

        ArrayList newList = new ArrayList();
        for (int i = 0; i < list.size(); i++) {
            Student student = (Student) list.get(i);
            if(!newList.contains(student)){
             newList.add(student);
            }
        }
        newList.forEach(new Consumer() {
            @Override
            public void accept(Object o) {
                Student student= (Student) o;
                System.out.println(student.getName()+"=="+student.getAge());
            }
        });
    }
}

1.2集合的由来

1.2.1集合的由来

面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。

1.2.2数组和集合的区别

长度区别:

数组的长度是固定的而集合的长度是可变的

 存储数据类型的区别:

数组可以存储基本数据类型 , 也可以存储引用数据类型; 而集合只能存储引用数据类型

内容区别:

数组只能存储同种数据类型的元素 ,集合可以存储不同类型的元素

1.3Collection集合的功能概述

1.3.1Collection的功能概述(通过API查看即可得到)

添加功能

boolean add(Object obj):添加一个元素

boolean addAll(Collection c):添加一个集合的元素  (给一个集合添加进另一个集合中的所有元素)

删除功能

void clear():移除所有元素

boolean remove(Object o):移除一个元素

boolean removeAll(Collection c):移除一个集合的元素(移除一个以上返回的就是true) 删除的元素是两个集合的交集元素 

如果没有交集元素 则删除失败 返回false

判断功能

boolean contains(Object o):判断集合中是否包含指定的元素    

boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(这个集合 包含 另一个集合中所有的元素才算包含 才返回true)

boolean isEmpty():判断集合是否为空

获取功能

Iterator<E> iterator()(重点)

长度功能

int size():元素的个数

交集功能

boolean retainAll(Collection c):获取两个集合的交集元素(交集:两个集合都有的元素)

1.3.2Collection集合的基本功能测试

boolean add(E e)
    boolean remove(Object o)
    void clear()
    boolean contains(Object o)
    boolean isEmpty()
    int size()

1.3.3Collection集合的高级功能测试

boolean addAll(Collection c)
    boolean removeAll(Collection c)
    boolean containsAll(Collection c)
    boolean retainAll(Collection c)

1.3.4集合的遍历之集合转数组遍历

集合的遍历

toArray() 把一个集合转成数组

其实就是依次获取集合中的每一个元素。

1.3.5Collection存储自定义对象并遍历

package org.westos.demo;

import java.util.*;

public class CollectionTest {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(100);
        list.add(200);
        list.add(400);
        list.add(500);      
        list.add(400);
        list.add(300);
        list.add(100);
        list.add(1);
        list.add(2);
        list.add(123);      
        list.add(200);
        for (int j = list.size() - 1;j >= 0;j--){
            for (int i = j - 1;i >= 0;i--){
                if (list.get(j).equals(list.get(i)) && i != j){
                    list.remove(i);
                    j = list.size() - 1;
                    i++;
                }
            }
        }

         System.out.println(list);

1.3.6集合的遍历之迭代器遍历

package com.kscng;
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
public class MyTest1 {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
 
        List list = new ArrayList<>();
        
        //集合
        list.add(1);
        list.add(2);
        list.add(3);
        
        //Iterator迭代器
        //1、获取迭代器
        Iterator iter = list.iterator();
        //2、通过循环迭代
        //hasNext():判断是否存在下一个元素
        while(iter.hasNext()){
            //如果存在,则调用next实现迭代
            //Object-->Integer-->int
            int j=(int)iter.next();  //把Object型强转成int型
            System.out.println(j);
        }
    }
 
}
 

1.3.7Collection集合存储字符串并遍历

package kscng;
 
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
 
/*
 * 需求:储存字符串并遍历
 * 
 * 分析:
 *         A:创建集合对象
 *         B:创建字符串对象
 *         C:把字符串对象添加到集合中
 *         C:遍历集合
 */
public class Collection {
    public static void main(String[] args) {
        // 创建集合对象
        Collection c = new ArrayList();
 
        // 创建字符串对象
        // 把字符串对象添加到集中中
        c.add("hello");
        c.add("world");
        c.add("java");
 
        // 遍历集合
        //通过集合对象获取迭代器对象
        Iterator it = c.iterator();
        //通过迭代器对象的hasNext()方法判断是否存在元素。
        while (it.hasNext()) {
            //通过迭代器对象的next()方法获取元素并移动到下一个位置。
            String s = (String) it.next();
            System.out.println(s);
        }
    }
}

1.3.8Collection集合存储自定义对象并遍历

package kscng;
 
import java.util.ArrayList;
import java.util.Collection;
 
/*
 * 练习:用集合存储5个学生对象,并把学生对象进行遍历。
 * 
 * 分析:
 *         A:创建学生类
 *         B:创建集合对象
 *         C:创建学生对象
 *         D:把学生添加到集合
 *         E:把集合转成数组
 *         F:编历数组
 */
public class Student {
    public static void main(String[] args) {
        // 创建集合对象
        Collection c = new ArrayList();
 
        // 创建学生对象
        Student a1 = new Student("林青霞", 27);
        Student a2 = new Student("周润发", 45);
        Student a3 = new Student("刘德华", 34);
        Student a4 = new Student("陈小春", 32);
        Student a5 = new Student("风清杨", 20);
 
        // 把学生添加到集合
        c.add(a1);
        c.add(a2);
        c.add(a3);
        c.add(a4);
        c.add(a5);
 
        // 把集合转成数组
        Object[] objs = c.toArray();
        
        //编历数组
        for (int x = 0; x < objs.length; x++) {
            Student s = (Student) objs[x];
            System.out.println(s.getName()+"---"+s.getAge());
        }
    }
}

1.4 List集合

1.4.1 List集合的特有功能概述

void add(int index,E element):    在指定索引处添加元素

E remove(int index):移除指定索引处的元素  返回的是移除的元素

E get(int index):获取指定索引处的元素

E set(int index,E element):更改指定索引处的元素 返回的而是被替换的元素

1.4.2ListIterator的特有功能

ListIterator 继承自Iterator 可以使用Iterator中的方法

ListIterator的特有功能

boolean hasPrevious(): 是否存在前一个元素

E previous(): 返回列表中的前一个元素

以上两个方法可以实现反向遍历 但是注意 要完成反向遍历之前 要先进行正向遍历 这样指针才能移到最后

如果直接反向遍历是没有效果的 因为指针默认位置就在最前面 他前面没有元素

1.4.3List集合存储学生对象并遍历

package kscng;

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

import com.soar.bean.Student;

@SuppressWarnings({ "rawtypes", "unchecked" })
public class Demo2_List {
/*
 *  * A:案例演示
    * 向List集合中存储学生对象
    * 通过size()和get()方法结合使用遍历。
 */
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(new Student("张三",23)); //Object obj = new Student("张三",23);
        list.add(new Student("李四",24));
        list.add(new Student("王五",25));
        list.add(new Student("赵六",26));

        for (int i = 0; i < list.size(); i++) {
            Student s= (Student)list.get(i);
            System.out.println(s.getName()+"..."+s.getAge());
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值