java基础篇—数组与集合
文章目录
1.数组(array)
概念:同一种类型数据的集合。其实数组就是一个容器。
定义格式1:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
示例:int[] arr = new int[5];
定义格式2:
元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7};
数组的内存分析:
栈(Stack):存放的都是方法中的局部变量,方法的运行一定要在栈中运行
堆(Heap):凡是new出来的东西都在堆中,堆内存里面的东西都有一个地址值
方法区(Method Area):存储.class相关信息,包含方法的信息
注意:
1.给数组分配空间时,必须指定数组能够存储的元素个数来确定数组大小。创建数组之后不能修改数组的大小。
2.数组可以装任意类型的数据,虽然可以装任意类型的数据,但是定义好的数组只能装一种元素, 也就是数组一旦定义,那么里边存储的数据类型也就确定了。
3.数组静态分配内存,在内存中连续
4. 数组下标从0开始
补充:
1.数组的优点:
随机访问性强(通过下标进行快速定位)
查找速度快
2.数组的缺点:
插入和删除效率低(插入和删除需要移动数据)
内存空间要求高,必须有足够的连续内存空间。
数组大小固定,不能动态拓展
2.集合
2.1.集合(Collection)
- List下有ArrayList,Vector,LinkedList
- Set下有HashSet,LinkedHashSet,TreeSet
- Collection接口下还有个Queue接口,有PriorityQueue类
2.1.1.List
List 接口存储一组不唯一,有序(插入顺序)的对象。
ArrayList: 底层数据结构是数组,查询快,增删慢,线程不安全,效率高,可以存储重复元素
LinkedList: 底层数据结构是链表,查询慢,增删快,线程不安全,效率高,可以存储重复元素
Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低,可以存储重复元素
2.1.2.Set
Set 接口存储一组唯一,无序的对象。
HashSet:底层数据结构采用哈希表实现,元素无序且唯一,线程不安全,效率高,允许包含值为null的元素,但最多只能一个。
元素的唯一性是靠所存储元素类型是否重写hashCode()和equals()方法来保证的,如果没有重写这两个方法,则无法保证元素的唯一性。
LinkedHashSet:底层数据结构采用链表和哈希表共同实现,链表保证了元素的顺序与存储顺序一致,哈希表保证了元素的唯一性。线程不安全,效率高。
TreeSet:底层数据结构采用二叉树来实现,元素唯一且已经排好序;唯一性同样需要重写hashCode和equals()方法,二叉树结构保证了元素的有序性。
小结:Set 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。
2.1.3.List和Set的区别
- List 接口实例存储的是有序的,可以重复的元素。Set 接口实例存储的是无序的,不重复的数据。
- List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector>
Set 接口存储一组唯一,无序的对象。 - Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>。
2.2.图(Map)
Map 接口存储一组键值对象,提供key(键)到value(值)的映射。尽管 Map 不是集合,但是它们完全整合在集合中。
Map 的内容可以被当作一组 key 集合,一组 value 集合,或者一组 key-value 映射。
Map下有Hashtable,LinkedHashMap,HashMap,TreeMap
HashMap:效率较高,不是线程安全的,允许null值(key和value都允许)
Hashtable:效率较低,是线程安全的,不允许null值
TreeMap:通过红黑树(R-B tree)实现,TreeMap中的元素默认按照keys的自然排序排列。(对Integer来说,其自然排序就是数字的升序;对String来说,其自然排序就是按照字母表排序)
2.3.HashMap和HashSet的区别
待补充,,,,,
3.数组和集合的区别
1.数组:数组的大小是固定的,并且只能存放同一种类型的数据(基本类型数据或引用类型数据)
2.集合:可以对数据数量不固定的数组进行存储和操作。如果程序中不清楚到底有多少对象,需要在容量不足的时候进行自动扩充,则需要使用集合,而不选择数组。
4.总结
在集合中常见的数据结构
ArrayXxx:底层数据结构是数组,查询快,增删慢
LinkedXxx:底层数据结构是链表,查询慢,增删快
HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()
TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序