2021-02-23

集合

如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象——可以使用Java集合框架
在这里插入图片描述
集合概念: 存放多个 相同类型 的元素的 数据结构

List:

1、分类

ArrayList

JDK中使用数组 实现 ArrayList , 数组的默认长度10
对应的数据结构:线性表(一段地址连续的内存空间)
特征:
1.元素访问的效率高
2.插入和删除操作的效率低

LinkedList

对应的数据结构:双向链表(每个数据节点中除了保存元素值以外,还包括上一个元素的地址和下一个元素的地址)

19.png

特征

1.插入和删除的效率高
2.元素访问的效率低

Set

1、特征

是一种无序集合(即:元素顺序与放入顺序无关)
是一种不可重复集合(即:集合中的元素不可以重复)

HashSet特性

数据结构

哈希赛特列表

特点:

HashSet判断元素不重复的方式

向HashSet中放入一个元素:

获取元素对象的hashCode值
根据hash散列算法,算出 哈希表的索引值
判断该位置是否已经有元素:
没有:直接放入该位置 --》 结束
有:调用已有对象的equals方法(或者 == 运算符)和要放入的对象比较
返回true : 舍弃要放入的元素 --》 结束
返回false:在当前位置下,以链表的形式追加(在jdk8+,对其做了优化,当链表长度大于等于8的时候,会将其数据结构重构为 平衡二叉树) --> 结束

Map

1、简介:

是一种对应关系,这种对应关系,叫做 键值对(key-value) / 映射,指的是: 根据一个key 值能够唯一的找到一个 Value 值(一个value值可以对应一个或者多个或者0个key值),所有的Map的实现类,都能保存 Key - Value 的 对应关系

2、常用API

put
get
containsKey / containsValue
remove / clear
size / isEmpty

HashMap特性:

HashMap 数据结构: 哈希赛特列表

HashSet 的底层是 HashMap , HashSet中的元素是作为HashMap的Key 存储的,Value 是一个Object对象

HashMap判断key是否重复的方式:
获取元素Key的hashCode值
根据hash散列算法,算出 哈希表的索引值
判断该位置是否已经有元素:
没有:直接放入该位置 --》 结束
有:调用已有对象的equals方法(或者 == 运算符)和要放入的对象比较
返回true : 使用要放入的元素覆盖原有值 --》 结束
返回false:在当前位置下,以链表的形式追加(在jdk8+,对其做了优化,当链表长度大于等于8的时候,会将其数据结构重构为 平衡二叉树) --> 结束

通过一个企鹅代码来简单了解集合:

先来一个企鹅类存放数据

package penguinlist;

public class Penguin {

//设置并封装属性
    private int id;
    private String name;
    private String sex;
//有参数与无参数构造方法,构造企鹅
    public Penguin() {
    }

    public Penguin(int id, String name, String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

//get和set的读写权限
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

//to String方法用来显示
    @Override
    public String toString() {
        return "Penguin{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}

测试ArrayList

package penguinlist;

import java.util.ArrayList;

public class TestPenguin {

    public static void main(String[] args) {
//使用泛型,后面的代码就不用强转了,省了很多事情
        ArrayList<Penguin> list=new ArrayList<Penguin>();
//创建对象的同时的进行赋值
        Penguin q1=new Penguin(1,"欧欧","Q仔");
        Penguin q2=new Penguin(2,"美美","Q妹");
        Penguin q3=new Penguin(3,"丫丫","Q妹");
        Penguin q4=new Penguin(4,"天天","Q仔");
        Penguin q5=new Penguin(5,"田田","Q妹");
//向集合里面添加元素的方法
        list.add(q1);
        list.add(q2);
        list.add(q3);
        list.add(0,q4);

//list.size()表示集合的长度,也就是集合里面元素的个数
        System.out.println("共计有"+list.size()+"只企鹅");
        //遍历并且显示数据
        for (int i=0;i<list.size();i++){
            Penguin penguin=list.get(i);
            System.out.println(penguin.getId()+"\t\t"+penguin.getName()+"\t\t"+penguin.getSex());
        }
        System.out.println("删除下标为1的元素");
        Penguin removePenguin=list.remove(1);
        System.out.println("删除的对象:"+removePenguin.getName());
        for (int i=0;i<list.size();i++){
            Penguin penguin=list.get(i);
            System.out.println(penguin.getId()+"\t\t"+penguin.getName()+"\t\t"+penguin.getSex());
        }
    }
}

测试结果:

共计有4只企鹅
4		天天		Q仔
1		欧欧		Q仔
2		美美		Q妹
3		丫丫		Q妹
删除下标为1的元素
删除的对象:欧欧
4		天天		Q仔
2		美美		Q妹
3		丫丫		Q妹

Process finished with exit code 0

测试LinkedList类:

package penguinlist;

import java.util.LinkedList;

public class TestPenguin1 {

    public static void main(String[] args) {

        LinkedList<Penguin> list = new LinkedList<Penguin>();

        Penguin q1 = new Penguin(1, "欧欧", "Q仔");
        Penguin q2 = new Penguin(2, "美美", "Q妹");
        Penguin q3 = new Penguin(3, "丫丫", "Q妹");
        Penguin q4 = new Penguin(4, "天天", "Q仔");
        Penguin q5 = new Penguin(5, "田田", "Q妹");

        list.add(q1);
        list.add(q4);
        list.addFirst(q3);//添加第一只企鹅
        list.addLast(q2);//添加最后一只企鹅

        System.out.println("共计有" + list.size() + "只企鹅");
        Penguin penguinFirst = list.getFirst();
        Penguin penguinLast = list.getLast();

        System.out.println("第一只企鹅:" + penguinFirst.getName());
        System.out.println("最后一只企鹅:" + penguinLast.getName());

        System.out.println("===============================================");
        for (int i = 0; i < list.size(); i++) {
            Penguin penguin = list.get(i);
            System.out.println(penguin.getId() + "\t\t" + penguin.getName() + "\t\t" + penguin.getSex());
        }

        System.out.println("===============================================");
        System.out.println("删除下标为1的元素");
        Penguin removePenguin =  list.remove(1);
        System.out.println("删除的对象:" + removePenguin.getName());
        for (int i = 0; i < list.size(); i++) {
            Penguin penguin = list.get(i);
            System.out.println(penguin.getId() + "\t\t" + penguin.getName() + "\t\t" + penguin.getSex());
        }
    }
}

测试结果:

共计有4只企鹅
第一只企鹅:丫丫
最后一只企鹅:美美
===============================================
3		丫丫		Q妹
1		欧欧		Q仔
4		天天		Q仔
2		美美		Q妹
===============================================
删除下标为1的元素
删除的对象:欧欧
3		丫丫		Q妹
4		天天		Q仔
2		美美		Q妹

Process finished with exit code 0

测试HashSet类:

package penguinlist;

import java.util.HashSet;
import java.util.Set;

public class TestPenguin2 {

    public static void main(String[] args) {

        Set<Penguin> set=new HashSet<Penguin>();

        Penguin q1=new Penguin(1,"欧欧","Q仔");
        Penguin q2=new Penguin(2,"美美","Q妹");
        Penguin q3=new Penguin(3,"丫丫","Q妹");
        Penguin q4=new Penguin(4,"天天","Q仔");
        Penguin q5=new Penguin(5,"田田","Q妹");

        set.add(q1);
        set.add(q2);
        set.add(q3);
        set.add(q4);
        set.add(q2);

        System.out.println(set.size());

        for (Object obj:set){
            Penguin penguin=(Penguin)obj;
            System.out.println(penguin.getId()+"\t\t"+penguin.getName()+"\t\t"+penguin.getSex());
        }

        System.out.println("===============================================");

        System.out.println("删除下标为2的元素");
        boolean removepenguin = set.remove(q2);


        for (Object obj:set){
            Penguin penguin=(Penguin)obj;
            System.out.println(penguin.getId()+"\t\t"+penguin.getName()+"\t\t"+penguin.getSex());
        }

    }
}

测试结果:

4
3		丫丫		Q妹
2		美美		Q妹
4		天天		Q仔
1		欧欧		Q仔
===============================================
删除下标为2的元素
3		丫丫		Q妹
4		天天		Q仔
1		欧欧		Q仔

Process finished with exit code 0

测试Map类:

package penguinlist;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.logging.Logger;

public class TestMap {

    private static Logger logger=Logger.getLogger(String.valueOf(TestMap.class));

    public static void main(String[] args) {

        Map penguins=new HashMap();

        Penguin q1=new Penguin(1,"欧欧","Q仔");
        Penguin q2=new Penguin(2,"美美","Q妹");
        Penguin q3=new Penguin(3,"丫丫","Q妹");
        Penguin q4=new Penguin(4,"天天","Q仔");
        Penguin q5=new Penguin(5,"田田","Q妹");

        //"a"是键 "q1"是相对应的值
        penguins.put("a",q1);
        penguins.put("b",q2);
        penguins.put("c",q3);
        penguins.put("d",q4);

        Scanner input=new Scanner(System.in);
        logger.info("请输入要查找的对象:");
        String key=input.next();
        if (penguins.containsKey(key)){
             Penguin penguin=(Penguin) penguins.get(key);
            System.out.println("key:"+key+"名字:"+penguin);
        }else {
            System.out.println("没有找到!");
        }
    }
}

测试结果:

二月 23, 2021 10:19:27 上午 penguinlist.TestMap main
信息: 请输入要查找的对象:
a
key:a名字:Penguin{id=1, name='欧欧', sex='Q仔'}

Process finished with exit code 0

测试MapIterator循环遍历:

package penguinlist;

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

public class TestIterator {

    public static void main(String[] args) {
        Map penguins=new HashMap();
        Penguin q1=new Penguin(1,"欧欧","Q仔");
        Penguin q2=new Penguin(2,"美美","Q妹");
        Penguin q3=new Penguin(3,"丫丫","Q妹");
        Penguin q4=new Penguin(4,"天天","Q仔");
        Penguin q5=new Penguin(5,"田田","Q妹");

        penguins.put("a",q1);
        penguins.put("b",q2);
        penguins.put("c",q3);
        penguins.put("d",q4);

        Iterator it=penguins.keySet().iterator();

        while (it.hasNext()){
            String key=(String)it.next();
            Penguin penguin=(Penguin)penguins.get(key);
            System.out.println(key+"\t\t"+penguin.getName()+"\t\t"+penguin.getSex());
        }
        System.out.println("=================foreach=================");
        for (Object str:penguins.keySet()){
            String key=(String)str;
            Penguin penguin=(Penguin)penguins.get(key);
            System.out.println(key+"\t\t"+penguin.getName()+"\t\t"+penguin.getSex());
        }
    }
}

测试结果:

a		欧欧		Q仔
b		美美		Q妹
c		丫丫		Q妹
d		天天		Q仔
=================foreach=================
a		欧欧		Q仔
b		美美		Q妹
c		丫丫		Q妹
d		天天		Q仔

Process finished with exit code 0

泛型和综合测试:

package penguinlist;


import java.util.*;

public class Test {
    public static void main(String[] args) {
        Penguin q1 = new Penguin(1, "欧欧", "Q仔");
        Penguin q2 = new Penguin(2, "丫丫", "Q妹");
        Penguin q3 = new Penguin(3, "花花", "Q妹");
        List<Penguin> list = new ArrayList<>();
        list.add(q1);
        list.add(q2);
        for (Penguin penguin : list) {
            System.out.println(penguin.getName() + "\t\t" + penguin.getSex());
        }
        for(int i = 0;i<list.size();i++){
            Penguin penguin = list.get(i);
            System.out.println(penguin.getName() + "\t\t" + penguin.getSex());
        }
        //Element
        LinkedList<Penguin> linkedList = new LinkedList<Penguin>();
        linkedList.add(q1);

        Set<Penguin> set =new HashSet<>();
        set.add(q1);
        set.add(q2);
        set.add(q3);
        System.out.println("========set=========");
        for(Penguin penguin : set){
            System.out.println(penguin);
        }

        System.out.println("=======map+======");
        Map<String ,Penguin>map=new HashMap<String ,Penguin>();
        map.put("a",q1);
        map.put("b",q2);
        map.put("c",q3);
        Iterator<String> it = map.keySet().iterator();
        while(it.hasNext()){
            String key = it.next();
            Penguin dog = map.get(key);
            System.out.println(dog);
        }

    }
}

测试结果:

欧欧		Q仔
丫丫		Q妹
欧欧		Q仔
丫丫		Q妹
========set=========
Penguin{id=3, name='花花', sex='Q妹'}
Penguin{id=2, name='丫丫', sex='Q妹'}
Penguin{id=1, name='欧欧', sex='Q仔'}
=======map+======
Penguin{id=1, name='欧欧', sex='Q仔'}
Penguin{id=2, name='丫丫', sex='Q妹'}
Penguin{id=3, name='花花', sex='Q妹'}

Process finished with exit code 0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值