集合:又被称为容器,用来存储数据,他是一个对象,能够将具有相同性质的多个元素汇聚成一个整体,集合被用于存储,获取,操纵和传输聚合的数据。
这种数据结构称为集合 collenction:他是集合的根接口,定义了所有集合的相关功能方法。
数组和集合的区别:
数组 |
集合 |
存数据 |
存数据 |
存同一种数据类型的数据 |
存任意数据类型 |
数组中没有方法 |
集合中提供了很多方法供我们操作 |
存储基本数据类型和引用数据类型string |
存储引用数据类型(对象) |
arraylist:是接口list的常用实现类,arraylist的底层是以数组实现的,且数组容量可变(初始容量是10,存多于10个就要扩容,底层就要创建新的数组),arraylist可以存储null值。
arraylist是不同步的,即不保证线程安全的。
扩容机制是按照1.5倍进行扩容的,选择初始容量的时候要进行斟酌。
arraylist与list方法与collention中的方法完全一致!存储都是有序的,且可以有重复
linkedlist:
底层使用链表实现,方法与arraylist相同,允许存储null值,
linkedlist是不保证线程安全的。
collention接口中的方法,arraylist中的方法,linkedlist都可以使用。
arraylist 和linkedlist的优缺点:
arraylist |
linkedlist |
底层以数组实现所以通过下标取值、赋值效率高,在内存上的地址是连续的 |
底层是链表结构实现的,所以通过下标取值赋值效率低。在内存上是不联系的 |
添加删除元素效率低 |
添加删除元素效率高 |
linkedlist因为以链表实现的集合,操作开头和结尾方便,所以其提供了除list之外的常见方法外,还提供了专门操作开头和结尾元素的方法,例如 addfirst()和addlast()等方法。
set:
set是collention的子接口
set集合不包含重复元素
set接口中的方法与collention中的方法一模一样,set中的元素不允许有重复的值。添加成功返回true,不成功返回false。
hashset
类 是set 的实现类,不允许有重复元素,不保证迭代顺序(也就是无序的,也就是输出的结果跟插入的顺序不一致。),不保证线程安全。所以hashset的方法与collention方法一致,允许null值。
hashcode:利用hashset存储自动以对象,使去除重复,就是想要保证自定义对象去重
→ 在自定义类中重写equals和hashcode方法即可,当hashcode相同的时候才会去执行equals,如果hashcode直接不同了,那么equals将不用再执行了。
treeset:
treeset是set的常见的子实现类,只要是set的子类都不能存储相同元素)(也就是不允许元素重复),并且set下的实现类都不能通过下标操作
treeset是对元素进行自然顺序(默认升序)排序,或者根据创建set的时候提供comparator进行排序。
treeset是不保证线程安全的。
基于treemap实现,使用元素的自然顺序对元素进行排序。且树是没有容量的。
从写自定义对象时,该对象的类需要实现comparable接口,重写其comparto方法。
例如存储学生对象,按年龄排序。
重写comparto方法 ,return返回0只存第一个,返回负数和正数都能够排序,具体效果经过尝试。
linkedhashset:linked 和 hashset的结合体,能保证数据不重复并且有序(按照输入顺序排序),
如对本文有疑问, 点击进行留言回复!!
ScrollView和RecyclerView的滑动事件处理
配置JAVA环境+安装Android Studio全过程+踩坑记录
Android P Camera2当SD卡被拔出来自动切换到内部存储
android 多个edittext 判空监听 让Button动态是否可点击
Android开源项目滚轮选择器WheelPicker的基本用法总结
网友评论