初入java_day12

容器(Container)
定义 : 是一个可以变换长度,多种数据类型的数据的集合 . 简单来说容器就是可以装载其他java对象的对象。
与数组的区别 :
数组—>是一个定长的, 有序的,有索引的 ,同一数据类型的数据的集合.(根据索引的查询效率高)
容器—>一个可以变换长度, 无序的 多种数据类型的数据的集合 .
集合(collection)
定义 : Java集合类存放于 java.util 包中,是一个用来存放对象的容器。是一个独立元素的序列,这些元素都服从一条或多条规则.其中List 必须按照插入的顺序保存元素. set不能有重复的元素.
注意:①、集合只能存放对象。比如你存一个 int 型数据 1放入集合中,其实它是自动转换成 Integer 类后存入的,Java中每一种基本类型都有对应的引用类型
②、集合存放的是多个对象的引用,对象本身还是放在堆内存中。
③、集合可以存放任意类型,不限数量的数据类型。
}
一.List
List承诺可以将元素维护在特定的序列中,List接口在Collection的基础上加入了大量的方法,使得可以在List中间可以插入和移除元素。下面主要介绍2种List
1.ArrayList 有序的可重复的
底层: 数组实现,进行动态扩容,每次使用copyOf方法进行扩容,每次扩容后的容量是原容量的1.5倍
优点 : 它的优点在于随机访问元素快
缺点: 增删效率低
线程不安全的: 效率高
2.Vector 向量
底层: 数组实现,使用copyof方法进行动态扩容,每次扩容后的容量是原容量的两倍.
线程安全, 效率低.

Iterator:迭代器,它是Java集合的顶层接口(不包括 map 系列的集合,Map接口 是 map 系列集合的顶层接口)
Object next():返回迭代器刚越过的元素的引用,返回值是 Object,需要强制转换成自己需要的类型
boolean hasNext():判断容器内是否还有可供访问的元素
void remove():删除迭代器刚越过的元素
所以除了 map 系列的集合,我们都能通过迭代器来对集合中的元素进行遍历.
总结: Iterator存在于 java.util 包中。核心的方法next(),hasnext(),remove()。

List 接口的三个典型实现:
①、List list1 = new ArrayList();
 底层数据结构是数组,查询快,增删慢;线程不安全,效率高
②、List list2 = new Vector();
 底层数据结构是数组,查询快,增删慢;线程安全,效率低,几乎已经淘汰了这个集合
③、List list3 = new LinkedList();
 底层数据结构是链表,查询慢,增删快;线程不安全!在这里插入图片描述
二 Set:典型实现 HashSet()是一个无序,不可重复的集合.

1、Set hashSet = new HashSet();
①、HashSet:不能保证元素的顺序;不可重复;不是线程安全的;集合元素可以为 NULL;
②、其底层其实是一个数组,存在的意义是加快查询速度。我们知道在一般的数组中,元素在数组中的索引位置是随机的,元素的取值和元素的位置之间不存在确定的关系,因此,在数组中查找特定的值时,需要把查找值和一系列的元素进行比较,此时的查询效率依赖于查找过程中比较的次数。而 HashSet 集合底层数组的索引和值有一个确定的关系:index=hash(value),那么只需要调用这个公式,就能快速的找到元素或者索引。
③、对于 HashSet: 如果两个对象通过 equals() 方法返回 true,这两个对象的 hashCode 值也应该相同。
1、当向HashSet集合中存入一个元素时,HashSet会先调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据hashCode值决定该对象在HashSet中的存储位置
a、如果 hashCode 值不同,直接把该元素存储到 hashCode() 指定的位置
b、如果 hashCode 值相同,那么会继续判断该元素和集合对象的 equals() 作比较
1)、hashCode 相同,equals 为 true,则视为同一个对象,不保存在 hashSet()中
2)、hashCode 相同,equals 为 false,则存储在之前对象同槽位的链表上,这非常麻烦,我们应该约束这种情况,即保证:如果两个对象通过 equals() 方法返回 true,这两个对象的 hashCode 值也应该相同。

注意:每一个存储到 哈希 表中的对象,都得提供 hashCode() 和 equals() 方法的实现,用来判断是否是同一个对象
对于 HashSet 集合,我们要保证如果两个对象通过 equals() 方法返回 true,这两个对象的 hashCode 值也应该相同。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值