java中的集合

首先我们需要了解什么是集合?

  简称集,主要就是用于存储多个元素的容器

集合和数组的区别

  元素类型:

    集合:引用类型(存储基本类型自动装箱)

    数组:基本类型和引用类型

  元素个数:

    集合:不固定,可任意扩容

    数组:固定,不能改变容量

  集合的好处:不受容器大小限制,可以随时添加,删除元素,提供了大量操作元素的方法(判断,获取等)

java的集合体系

  单列集合(Collection(单列集合的顶级接口))

    List:因为是接口,要直接调用需要用子类进行调用,ArrayList

    Set(接口):  :HashSet(子类)

  双列集合(Map:key,value)

    Map:HashMap

如图:

 

 

 List集合的特点

特点:

  可重复,有序(存取顺序相同)

应用:

  List list = new ArrayList();    :父接口指向子接口(多态)

案例:

需求:向List集合中添加三个元素,并遍历打印

分析:

  A:向集合中添加元素的方法为:add()

  B:遍历集合的方式:for

  C:获取集合中元素个数的方式:size()

步骤:

  1.创建集合对象

    List list = new ArrayList();

  2.分别创建三个Student(学生)对象

  3.使用add方法将Student对象添加到集合中

  4.使用for循环遍历集合并打印

代码:

package dome7;

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 +
                '}';
    }
}

测试类:

package dome7;

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

public class Test {
    //测试类
    public static void main(String[] args) {
        //创建集合对象
        List list = new ArrayList();
        //创建学生对象
        Student stu = new Student("乔峰",19);
        Student stu1 = new Student("虚竹",18);
        Student stu2 = new Student("段誉",199);
        //添加到集合中
        list.add(stu);
        list.add(stu);
        list.add(stu);
        System.out.println(list);
        //集合的大小
        System.out.println(list.size());
        //循环打印集合
        for (int i = 0; i <list.size() ; i++) {
            //get(索引):获取到集合中指定的元素
            System.out.println(list.get(i));
        }
    }
}

输出结果:

[Student{name='乔峰', age=19}, Student{name='乔峰', age=19}, Student{name='乔峰', age=19}]
3
Student{name='乔峰', age=19}
Student{name='乔峰', age=19}
Student{name='乔峰', age=19}

 Set集合

  set集合是接口,使用时需要通过子类实例化:Set<t> 变量 = new HashSet<>()

  特点:无序(元素的存取顺序不一样),唯一

  注意:Set集合保证元素的唯一性主要依赖与:equals(),hashCode()两个方法,要使用,需要在子类中重

写,不然就默认调用的是Object对象。

Map集合

  Map集合时接口,使用时需要通过子类实例化:Map<T1,T2> map = new HashMap<>();

  特点:双列集合,元素由键值段(Entry)构成:key = value(key不可以重复,value可以重复)

常见的元素对象:

  V put(Key,Value) :添加元素(键值段的形式)需要注意的是在元素第一次添加,会返回null,而重复添加,会用新值

覆盖旧值,并返回旧值

  V get(object Key): 根据键获取其对应的值

  Set<K> keySet():   获取所有键,并转换成set集合

栗子:

package dome7;

import java.util.*;

public class sljh {
    //需求:向map集合中添加三个学生类
//分析
        public static void main(String[] args) {
            //创建集合对象
            //值 :学生的编号   //键:具体的学生对象
            Map<Integer,student> map = new HashMap<>();
            //创建学生对象
            student s1 = new student(19,"刘备");
            student s2 = new student(19,"张飞");
            student s3 = new student(19,"关羽");
            //将元素添加到集合中,键是唯一
            student a = map.put(1,s1);   //添加到集合中,键是唯一
            student b = map.put(2,s2);
            student c = map.put(3,s3);
            System.out.println(a);   //第一次添加a为null
            System.out.println(b);   //
            System.out.println(map);
            //根据键获取其对应的值
            System.out.println(map.get(1));
            //遍历集合
            //遍历步骤
                //1.获取所有键的集合   keySet()
                //2.遍历所有的键,获取到每一个值    迭代器/增强for
                //3.根据键,获取指定的值
            //获取所有键的集合,因为键只能是唯一,所以用Set
            Set<Integer> keys = map.keySet();
            //创建迭代器对象
            Iterator<Integer> it = keys.iterator();
            while(it.hasNext()){   //判断迭代器中是否有元素
                Integer key = it.next();   //获取迭代器中的元素
                student value = map.get(key);  //根据键获取值
                System.out.println("key:"+ key +"....value:"+value);
            }
        }
    }
    //学生类
    class student{
        private int age;
        private String name;

        public student() {
        }

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

        public int getAge() {
            return age;
        }

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

        public String getName() {
            return name;
        }

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

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

        @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 &&
                    name.equals(student.name);
        }

        @Override
        public int hashCode() {
            return Objects.hash(age, name);
        }
    }
在Map集合中添加三个学生类对象

 

posted @ 2021-01-12 09:50  飞天神猫丶  阅读(95)  评论(0编辑  收藏  举报