javase 集合

集合

在这里插入图片描述
集合
collection
list和set集合(泛化关系:is a)
1.list有序可重复
2.set无序不可重复
iterator(关联关系:has a)
实现关系(like a)
list集合:arraylist集合,linkedlist集合,vector
数组(非线程安全)、双向链表、数组(线程安全)
vector(所有的方法都有synchronized,但是效率比较低,现在有别的方法保证线程安全,所以使用较少了)
set集合:hashset,实际上实现了一个hashmap集合,使用了哈希表数据结构
treeset:实际上实现了一个treemap集合,底层使用了二叉树数据结构

map
map一key和value这种键值对的方式存储元素,key和value都是存储java对象的内存地址
hashmap底层是hash表,非线程安全
hashtable也是哈希表,线程安全效率低,现在用的少,因为有更好的方案
treemap

map集合中的key就是一个set集合,往set集合中放数据,实际上是放入了map集合中的key部分

collection

collection集合中的方法
add,添加元素,因为有自动装箱的机制,所以可以加很多种数据类型
size,获取集合中元素的个数
clear,清空集合
contains,是否包含
remove移除

关于集合遍历、迭代
在collection集合类通用(重要)
迭代器方法:hasnext,next
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
string类的equals方法重写了,比较内容不比较内存地址
contains方法底层调用了equals方法。
放在集合里面的元素要重写equals方法
integer类的equals方法重写了
remove方法调用了equals方法
迭代集合元素过程中,不能调用集合对象的remove删除元素,会出现异常(改变了集合结构,需要重新获取迭代器),集合中元素删除,但是没有更新迭代器
c2.remove()
使用迭代器删除可以吗?
可以(自动更新迭代器和集合)

list

get方法,根据下标获取元素
在这里插入图片描述
arraylist集合,底层是object数组,初始容量是10
扩容,增长到原容量的1.5倍
优化:尽可能少的扩容
右移一位等于除以2
优缺点:检索效率高 ,增删元素效率低(不包括数组尾)
集合用啥比较多,是arraylist集合,因为向数组末尾添加元素,不受影响,另外检索元素操作比较多
数组尾部添加元素为什么效率高
不需要遍历,放元素效率较高
链表优缺点:增删元素效率高(因为内存地址不连续,不涉及大量元素位移),查询效率低,需要从头结点遍历

在这里插入图片描述
vector
底层也是一个数组
初始容量是10,满了之后扩容,扩容特点是原容量2倍
arraylist集合扩容是原容量1.5倍
vector是线程同步的,线程安全的,效率较低
将arraylist变成线程安全的操作方法
在这里插入图片描述

mylist就会变成线程安全的
泛型机制
不用泛型的代码,取出对象之后,需要向下转型

在这里插入图片描述

用泛型来指定集合中的数据类型
在这里插入图片描述
泛型的缺点:集合中存储的元素缺乏多样性
大多数业务中,集合中元素类型是统一的
但是调用子类型特有的方法,还是需要转型
在这里插入图片描述

在这里插入图片描述

自定义泛型

hashset集合特点:无序不可重复
存储顺序和取出的顺序不一样
取出来的数值放到key部分了
treeset集合特点无序不可重复,但是可以按照大小排序
从小到大自动排序

map 的方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值