List集合

集合结构如图

在这里插入图片描述

在这里插入图片描述

1.集合主要是两组(单列集合,双列集合)
2.Collection接口又两个重要的子接口List、Set,他们实现的子类都是单列集合
3.Map 接口的实现子类 是双列集合 存放的是K-V

Collection接口

add 添加单个元素,添加基本数据类型会有一个自动装箱的过程
remove 删除指定元素(指定索引或者元素,删除索引返回元素,删除元素返回Boolean值)
contains 查找元素是否存在
size 获取元素个数
isEmpty 判断元素是否为空
clear 清空集合
addAll 添加多个元素
removeAll 删除多个元素

			 List c = new ArrayList();
	        Set s = new HashSet();
	        c.add(1);
	        c.add(2);
	        s.add(1);
	        s.add(3);
	        s.addAll(c);
	       // c.remove(1);
	        System.out.println(s);  //[1, 2, 3]
	        

Iterator迭代器
iterator()是Iterable接口的方法,所以 所有实现Collection的集合都有Iterator迭代器。且Iterator迭代器对象本身不存放对象,只用来遍历集合。
在这里插入图片描述

ArrayList、LinkedList和Vector的异同

ArrayList 是List接口的主要实现类,线程不安全,效率高
LinkedList底层使用双向链表,对频繁的插入,删除操作效率比ArrayList高
Vector是List接口的古老实现类,1.0实现,1.2才出现List接口。线程安全,效率低

相同:都是List接口的实现类,存储有序的,可重复对象数据

List 历代版本
list 1.7之前创建数组类似于单例的饿汉模式,在new List对象时就创建长度为10的Object数组。
1.8之后采用类似懒汉模式,在add方法调用时才创建数组对象

Set
set是Collection的子接口,没有提供新的方法
set集合不允许包含相同的元素,使用equals判断是否相同。
实现类:HashSet、TreeSet、LinkedHashSet
HashSet:线程不安全,可以有null,不可重复
LinkedSet:是HashSet的子类,遍历时会是添加元素
TreeSet:放入属性必须同一个类,可以排序
无序性:不等于随机性,而是内存中数据存放的位置不按照数组下标存储,而是按照hash值存储。
不可重复性:使用equals判断元素是否相同。

HashSet 的add方法
向添加元素时,调用元素所在类的HashCode()方法,计算元素的哈希值,此哈希值接着通过某种算法计算出元素在HashSet底层数组中的存放位置(索引位置)。
之后判断此位置上是否有元素,若是有则比较此位置上有元素a(或以链表形式存在多个元素),则比较添加元素和元素a的Hash值,若是不同则存储;若是相同则调用存储元素所在类的equals方法。若是返回true,则添加失败

若是返回false,则将元素添加到链表的尾部,原链表尾部指向新添加元素(1.7之前添加到链表的头部,新添加元素放入数组,作为链表头指向原链表)

LInkedHashSet
是HashSet的子类,在添加数据同时,还维护了两个引用,链表记录了前一个数据和后一个数据。

TreeSet
添加数据要求是相同对象
两种排序方式:自然排序和定制排序
存放对象实现Compareble接口或者new TreeSet时传入Compareble匿名内部类
自然排序:比较两个对象,排序方法为compareTo,比较是否相同不在使用equals
定制排序

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值