集合

这篇博客详细介绍了Java集合框架,包括集合、数据结构、泛型、迭代器和二叉树等概念。集合是一个容器,用于存储多个对象,如ArrayList、LinkedList和HashSet等。文章探讨了这些集合的底层数据结构,如数组、链表和二叉树,并解释了它们的增删查改操作。此外,还介绍了泛型的概念,以及自动类型推断和自定义泛型的使用。博客还涵盖了迭代器的工作原理和集合的遍历方法。最后,提到了重要的Collections工具类和二叉树的遍历方式。
摘要由CSDN通过智能技术生成

集合

集合概述

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

集合是一个容器,是个载体,可以一次容纳多个对象

在实际开发过程中,假设链接数据库,数据库当中有10条记录,那么假设把这10条记录查询出来,在Java程序中会将10条数据封装成10个Java对象,然后将10个Java对象放到某一个集合当中,将集合传到前端,然后遍历集合,将一个数据一个数据展现出来

集合不能直接存储基本数据类型,另外集合也不能直接存储Java对象,集合当中存储的都是Java对象的内存地址(或者说集合中存储的是引用。)

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

注意:

集合在Java中本身是一个容器,是一个对象。

​ 集合在任何时候存储的都是“引用。”****

在Java中,每一个不同的集合,底层都会对应不同的数据结构。往不同的集合中存储元素,等于将数据放到不同的数据结构当中。

数据结构:数据存储的结构就是数据结构。不同的数据结构,数据存储方式不同。例如:

数组、二叉树、链表、哈希表都是最常见的数据结构

java中已经将数据结构实现好了,已经写好了这些常用的集合类。只需要知道什么时候使用哪种数据结构。

new ArrayList(); 创建一个集合,底层是数组

new LinkedList(); 创建一个集合对象,底层是链表

new TreeSet(); 创建一个集合对象,底层是二叉树

集合继承结构图

最好对集合继承结构图熟悉,多看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MnMAbSfN-1614526270119)(C:\Users\Administrator\Pictures\集合继承结构图.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kblh3RCj-1614526270122)(C:\Users\Administrator\Pictures\集合继承结构图2.png)]

结构图来源:https://blog.csdn.net/weixin_48586922/article/details/109675559

所有集合类都在java.util包下

java中集合分为两大类:

一类是单个方式存储元素:

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

​ Collection又继承于Iterable(可迭代的,可遍历的,所有集合元素都是可迭代,可遍历的)

​ Collection继承于Iterable,Iterable内有个方法iterator(),返回一个迭代器对象

​ 集合迭代器对象:

​ Iterable it = Collection对象.iterator

迭代器用于取出集合对象,也就是遍历

迭代器通过hasNext(),next(),remove()获取或删除数据

接口无法实例化对象

Collection常用方法:

add():往集合中添加元素,存储的是内存地址

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

contains():判断集合中是否含有指定元素,包含true,不包含false

Collection c = new ArrayList();
String s1 = new String("abc");
c.add(s1);
String s2 = new String("def");
c.add(s2);
String s3 = new String("abc");
//集合中是否包含s3
System.out.println(c.contains(x));//返回true还是flase
//contains源码中可以看见底层重写了equals方法,因此两者比较的是内容返回true,也表示包含这个元素

当你集合中存放的是对象时如果对象方法没有重写equals方法那么,类似于上面那种情况,返回false

public static void main(String[] args){
   
    Collection c = new ArrayList();
    User user1 = new User("abc");
    c.add(user1);
    User user2 = new User("abc");
    System.out.println(c.contains(user2));//返回false
}
class User{
   
    private String str;
    public User(){
   }
	public void User(String str){
   
		this.str = str;
    }
}

isEmpty():判断集合中是否存在元素,返回true和flase

toArray():将集合转为Object数组

remove():删除集合中的元素

Collection通用迭代方式,Map集合中不能使用,只适用于Collection以及子类使用

Iterator it = new Iterator();//获取迭代器对象

Iterator方法用于遍历集合中元素

当集合结构发生改变时,迭代器必须重新获取,否则会发生异常

迭代器方法:

​ hasNext():如果有下一个元素返回true,没有返回false

​ next():输出元素

//Collection c = new ArrayList();父类实例化子类方法多态
//以ArrayList为例
ArrayList arraylist = new ArrayList();//创建一个ArrayList集合对象
arraylist.add("你好");//add是Arrayist一个方法,用来往集合中添加元素,不像数组只允许固定存放某一种格式,可以多种格式混合
arraylist.add(11);
arraylist.add(133.4);
arraylist.remove(1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值