集合体系——[06]

数据结构是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。

分为数组,链表,哈希表,树,栈,堆,队列,图共八种。

算法简单来说就是解决问题的步骤,方式。


单个变量 开辟一个空间

数组:开辟一连串连续的空间

对象:

自定义的数据,有很多不同的数据类型的属性,与数组有什么相同的地方?可以存储多个的值。值与值之间有没有特定的联系?

String name=“韦昊”;

String no=“158746352789546123”;

int age=20;

在内存中,存储的方式完全不同


数组

特征:1. 通过索引值来存取数据 2.显式的索引 3.容量是固定的(致命缺点)


Collection

存储一组不唯一,无序的数据。

List 本质上来说,是基于数组的动态实现,会实现动态扩容。

存储一组不唯一,有序的数据。

Set

存储一组唯一的,无序的数据。

map

按键值对的形式来存取数据的,键和值的数据类型可以是任意的数据类型。取值的时候,可以通过键来拿到这个值。提供键到值的映射。


ArrayList:长度可变,特别适用于遍历,

1、元素个数不确定

2、遍历数据

size():代表,集合的长度。

add():向集合中添加元素

container() :查询集合是否有指定的元素

remove() :移除元素

LinkedList:链表式的存储方式,特别适合用于插入,删除操作。

一、Map集合简述

1、Map集合是什么?

Collection集合是以单个方式存储元素的,而Map集合是以键值对的方式存储元素,所有Map集合的Key是无序不可重复的,key和value都是引用数据类型,存的

都是内存的地址。

2、HashMap

HashMap是一种无序的存储结构。HashMap的实现是假定元素是放在一个圆形的环上,每次put进来的元素根据其hashCode计算该元素在圆环上索引,把该元素放到合适的位置。hashmap是用哈希表实现的map类。

哈希表**(**Hash table,国内也有一些算法书籍翻译为散列表)是根据关键码的值而直接进行访问的数据结构。每个是以键值对key-value形式存储。

3、Map集合的特点

Map集合是一个双列集合,一个元素包含两个值(一个key,一个Value)

Map集合中的元素,key和value的数据类型可以相同,也可以不同

Map集合中的元素,key是不允许重复的,无索引的,value是可以重复的

Map集合中的元素,key和value是一一对应的

Map集合后面的键对应的值会覆盖前面重复键的值

Map集合的键值对都可以为null

二、泛型

2.1 概念

在类定义的时候,不会给类中的变量,类中的方法参数以及方法的返回值定义数据类型,而在实例化对象的时候才会确定数据类型。

约束元素的数据类型的,这样的做法让代码变得根据灵活

2.2 泛型符合

K: key的简写,代表键的数据类型

V:Value的简写,value代表值的数据类型

T: Type的简写,代表元素的类型

E:Element的简写,代表元素

只是一种符合,是一种占位符,当然可以使用任何的字母。

2.3 自定义泛型方法
package entity;
public class Student<T> {
    private T stuId;

    public Student() {
    }

    public Student(T stuId) {
        this.stuId = stuId;
    }

    public T getStuId() {
        return stuId;
    }

    public void setStuId(T stuId) {
        this.stuId = stuId;
    }

    public T getStu(T stuName){
        return stuId;
    }
}

2.4 自定义泛型的接口

接口定义:

package entity;

public interface StudentService<T,E> {
    T add(E e);
}

接口的使用:

import entity.Student;
import entity.StudentService;


public class StudentServiceImpl implements StudentService<String, Double> {

    @Override
    public String add(Double aDouble) {
        return null;
    }
}
2.5 泛型的边界

泛型的上限与下限

<? extends K> 上限
<? super K>   下限

定义

//代表传入的对象,必须是Pet的子类
public void feed(List<? extends Pet> list){
    for (Pet pet : list) {
        pet.eat();
    }
}

//代表传入的对象,必须是Pet的父类
public void feed2(List<? super Pet> list){
    for (Object o : list) {

    }
}

调用:

Master master=new Master();
Dog dog=new Dog();
Cat cat=new Cat();

List<Dog> list=new ArrayList<>(); //调用的时候,尖括号中定义数据类型
list.add(dog);
master.feed(list); 
2.6使用泛型的好处
1、代码量减少,避免了向上转型,向下转型
2、节省了内存资源的消耗,提高了代码的运行速度
3、使得数据更加安全
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值