集合概述

  1. 什么是集合?有什么用?

    数组其实就是一个集合。集合实际上是一个容器。用来容纳其他类型的数据。

    集合在开发中的使用?

    集合是一个容器,可以一次容纳多个对象,在实际开发中,将java对象放到某一个集合中,将集合传到前端,然后遍历集合,将数据显示出来。

  2. 集合不能直接存储基本数据类型,集合中存储的是java对象的内存地址。

    list.add(100);//自动装箱Integer

    注意:集合在java中本身是一个容器,是一个对象。

    ​ 集合中任何时候存储的都是引用。

  3. java中每一个不同集合,底层对应不同的数据结构,往不同的集合中存储元素,等于将数据放到了不同的数据结构中。例如:数组,二叉树,链表,哈希表

    new ArrayList();//底层是数组
    new LinkedList();//底层是链表
    new TreeSet();//底层是二叉树
    new HashMap();//底层是哈希表
    
  4. 所有的集合在java.util包下

  5. 集合分为两大类:

    • 一种是单个方式存储元素:

      单个方式存储元素,这一类集合超级父接口是:java.util.Collection

    • 一种是以键值对的方式存储元素:

      这一类集合超级父接口是:java.util.Map

  6. 集合的继承结构图

在这里插入图片描述
在这里插入图片描述
总结(所有的实现类):

  • ArrayList:底层是数组。
  • LinkedList:底层是双向链表。
  • Vector:底层是数组,线程安全的,效率较低,使用较少。
  • HashSet:底层是HashMap,放到HashSet集合中的元素等同于放到HashMap集合key部分了。
  • TreeSet:底层是TreeMap,放到TreeSet集合中的元素等同于放到TreeMap集合key部分了。
  • HashMap:底层是哈希表。
  • Hashtable:底层也是哈希表,线程安全的, 效率较低,使用较少
  • Properties:是线程安全的,并且key和value只能存储字符串String。
  • TreeMap:底层是二叉树。TreeMap集合的key可以自动按照大小顺序排序

List集合存储元素的特点:

有序可重复:

  • 有序:存进去的顺序和取出的顺序相同,每一个元素都有下标。
  • 可重复:存进去1,可以再存储一个1

Set(Map)集合存储元素的特点:

无序不可重复:

  • 无序:存进去的顺序和取出的顺序不一定相同。Set集合中元素没有下标。
  • 不可重复:存进去1,不能再存储1了。

SortedSet(SortedMap)集合存储元素的特点:

首先是无序不可重复的,但是SortedSet集合中的元素是可排序的。

  • 无序:存进去的顺序和取出的顺序不一定相同。另外Set集合中元素没有下标。
  • 不可重复:存进去1,不能再存储1了。
  • 可排序:可以按照大小顺序排列。

Map集合的key,就是一个Set集合。

往Set集合中放数据,实际上放到了Map集合的key部分。

泛型

  1. jdk5之后推出的新特性:泛型

  2. 泛型语法机制只在程序编译阶段起作用,运行阶段没用

  3. 使用了泛型好处是什么?

    • 集合中存储的元素类型统一了
    • 从集合中取出的元素类型是泛型指定的类型,不需要向下转型
  4. 泛型的缺点是什么?

    导致集合中存储的元素缺乏多样性!

    大多数业务中,集合中元素的类型还是统一的。所以这种特性广受认可。

  5. Jdk8之后

  6. ArrayList<这里的类型会自动推断>

List<Animal> list=new ArrayList<>();
List<Animal> list=new ArrayList();//可以省略<>

自定义泛型

自定义泛型时,<>中的是一个标识符,随便写

java源代码中出现的:和

E是Element单词首字母。元素

T是Type单词首字母。类型

public class Test<标识符随便写>{//标识符相当于形参,通常写E
    public void doSome(标识符随便写 o){
        System.out.println(o);
    }
}
Test<String> t=new Test();//泛型指定了String
t.doSome("123");//只能放入String类型
for(String i,t){//增强for循环输出集合元素
    System.out.println(i);
}
Test t=new Test();//不使用,默认Object类型
t.doSome(new Object());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值