集合框架知识总结

 

1、什么是集合?

集合是对象的容器,定义了对多个对象进行操作的常用方法,可以实现数组的功能。

2、集合和实验的区别?

  • 数组长度固定,集合长度不固定。

  • 数组可以存储基本类型和引用类型,集合只能存储引用类型。

  • PS:在Java体系中,集合可分为2大类:1、List/Set 2、Map

3、Collection体系集合:

Collection集合方法示例:

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * @author 小河子~
 * @VX xiaohe66i
 * @date 2021年06月13日 21:54
 */
public class CollectionTest {
    public static void main(String[] args) {
        //创建集合
        Collection collection = new ArrayList();
        //添加元素
        collection.add("苹果");
        collection.add("西瓜");
        collection.add("草莓");
        //获取集合长度
        System.out.println("collection.size() = " + collection.size());
        System.out.println("collection集合元素为:" +collection);
        //删除元素
//        collection.remove("苹果");
//        System.out.println("collection删除后: " + collection.size());
        //清除元素
//        collection.clear();
//        System.out.println("collection清除后: " + collection.size());
        //遍历元素
        //增强for循环
        System.out.println("------使用增强for循环-------");
        for (Object o : collection) {
            System.out.println(o);
        }
        //使用迭代器(迭代器专门用来遍历集合的一种方式)
        //hasNext();用来判断有没有下一个元素,next();获取下一个元素
        System.out.println("------使用迭代器-------");
        Iterator iterator1 = collection.iterator();
        while (iterator1.hasNext()){
            String s=(String)iterator1.next();
            System.out.println(s);
        }
        System.out.println("元素个数:"+collection.size());
        //集合判断
        System.out.println(collection.contains("西瓜"));
        System.out.println(collection.isEmpty());


    }

}

 

Student类代码:

import java.util.Objects;

/**
 * @author 小河子~
 * @VX xiaohe66i
 * @date 2021年06月13日 21:51
 */
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);
    }
}

运行截图:

PS:遍历同时不能使用集合删除方法,否则出现并发修改异常,可使用迭代器的删除方法。

4、Map集合

Map集合的特点:

  • 用于存储任意键值对(Key-Value)。

  • 键:无下标、不可以重复(唯一)。

  • 值:无下标、可以重复 。

  • Map接口称为“映射”存储一对数据(Key-Value),键不可重复,值可以重复。

HashMap

1、线程不安全,运行效率快。

2、允许用null 作为key或是value。

3、存储结构:哈希表

HashMap方法功能演示:

import java.util.HashMap;
import java.util.Map;

/**
 * @author 小河子~
 * @VX xiaohe66i
 * @date 2021年06月13日 20:32
 *
 * Map称为“映射”存储一对数据(Key-Value),键不可重复,值可以重复。
 */
public class HashMapTest {
    public static void main(String[] args) {
        //创建集合
        HashMap<Student,String>students=new HashMap<Student,String>();
        //添加元素
        Student s1 = new Student("小明",100);
        Student s2 = new Student("小丽",200);
        Student s3 = new Student("小红",300);
        students.put(s1,"北京");
        students.put(s2,"上海");
        students.put(s3,"广州");
        //插入s3后会覆盖之前的数据.
        students.put(s3,"南京");
        students.put(new Student("小刚",250),"杭州");
        System.out.println("students元素个数: " + students.size());
        System.out.println(students.toString());
        //2删除
        students.remove(s1);
        System.out.println("students删除后元素个数:" + students.size());
        //3遍历Map的两种方法
        //3.1、使用keySet()
        System.out.println("--------keySet---------");
        for (Student key : students.keySet()) {
            System.out.println( key.toString()+"------->"+students.get(key));
        }
        //3.2使用entyrSet()
        System.out.println("--------entyrSet---------");
        for (Map.Entry<Student, String> entry : students.entrySet()) {
            System.out.println(entry.getKey()+"------->"+entry.getValue());
        }
        //contains方法判断是否包含某些信息
        //通过key判断
        System.out.println(students.containsKey(new Student("小丽", 200)));
        //通过value判断
        System.out.println(students.containsValue("上海"));


    }

}

Student类:

import java.util.Objects;

/**
 * @author 小河子~
 * @VX xiaohe66i
 * @date 2021年06月13日 20:30
 */
public class Student {
    private String name;
    private int stuNo;

    public Student() {
    }

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

    public String getName() {
        return name;
    }

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

    public int getStuNo() {
        return stuNo;
    }

    public void setStuNo(int stuNo) {
        this.stuNo = stuNo;
    }

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

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return stuNo == student.stuNo && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, stuNo);
    }
}

运行截图:

TreeMap

实现了SortedMap接口(Map的子接口),可以对key自动排序,Key需实现Comparable接口。

TreeMap方法功能演示:

import java.util.Map;
import java.util.TreeMap;

/**
 * @author 小河子~
 * @VX xiaohe66i
 * @date 2021年06月13日 21:22
 */
public class TreeMapTest {
    public static void main(String[] args) {
        //新建集合
        TreeMap<Student,String>treeMap=new TreeMap<>();
        //添加元素
        Student s1 = new Student("小张",10);
        Student s2 = new Student("小李",15);
        Student s3 = new Student("小刘",20);
        treeMap.put(s1,"北京");
        treeMap.put(s2,"上海");
        treeMap.put(s3,"广州");
        treeMap.put(new Student("小赵",20),"南京");
        //遍历:1、使用keySet遍历
        System.out.println("-----keySet()-------");
        for (Student student : treeMap.keySet()) {
            System.out.println(student.toString()+"------->"+treeMap.get(student));
        }
        //2、使用entrySet()
        System.out.println("------entrySet()--------");
        for (Map.Entry<Student, String> entry : treeMap.entrySet()) {
            System.out.println(entry.getKey()+"------->"+entry.getValue());
        }
        //判断
        treeMap.containsKey(new Student("小张",10));
        System.out.println(treeMap.containsValue("北京"));

    }


}

Student类:

/**
 * @author 小河子~
 * @VX xiaohe66i
 * @date 2021年06月13日 21:23
 */
public class Student implements Comparable<Student>{
    private String name;
    private int stuNo;

    public Student() {
    }

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

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

    public String getName() {
        return name;
    }

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

    public int getStuNo() {
        return stuNo;
    }

    public void setStuNo(int stuNo) {
        this.stuNo = stuNo;
    }

    @Override
    public int compareTo(Student o) {
        int n2=this.stuNo-o.getStuNo();
        return n2;
    }
}

程序运行截图:

 

其他实现类

Hashtable :

  • JDK1.0版本,线程安全,运行效率慢;不允许null作为key或是value。

Properties :

  • Hashtable的子类,要求key和value都是String。通常用于配置文件的读取。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值