1.数组:
数组长度开始的时候必须指定,一旦指定不能更改
保存的必须是同一类型的元素
使用数组增加删除元素比较麻烦
数组灵活性不足
2.集合:
可以动态保存任意多个对象
提供了一系列方便操作的方法
集合主要分为两组:单列集合(单个对象)、双列集合(键值对形式)
Collection接口有两个重要的子类List,Set,他们的实现子类都是单列集合
Map接口的实现子类是双列集合,存放k-v
collection有些是有序的List,无序的set
collection通过list和set子接口实现
iterator迭代器 next()作用下移,将下移的集合返回给上个元素
list中的元素有序存取顺序一致,可以重复
Array list可以存放null
是由数组来实现数据存储的
array list是线程不安全的,多线程的情况下不建议使用arraylist
linked list底层实现了双向链表和双端队列特点
可以添加任意元素
linkedlist和arraylist的比较
linked list底层是双向链表,增删效率高,通过链表进行追加,改查效率低
array list底层可变数组,增删效率低,改查效率高
set不能使用索引的方式来获取,存放数据是无序的
hashset实际上是hashmap只能存放一个nul
hal
hashmap 的底层是数组+链表+红黑树(链表到达一定量的时候,而且满足数组的大小在某一个范围的时候)
linkedhashset底层是linkedhashmap,底层维护了一个数组+双向链表
存取顺序是一致的
map用于保存具有映射关系的数据
存放是无序的,key不可以重复,value可以重复
hashmap没有实现线程同步,是线程不安全的
hashtable不能存放null,它是线程安全的
开发中如何选择集合实现类:
先判断存储类型(一组对象(单列)或者键值对(双列))
单列Collection
List允许重复,增删多LinkedList(底层双向链表),改查多Array List(底层Object的可变数组)
Set不能重复,无序Hash Set底层HashMap(维护哈希表-->数组+链表+红黑树)
有序TreeSet(使用匿名内部类进行排序)
存取顺序一致LinkedHashSet(数组+双向链表)
双列Map:
无序hashmap
排序treemap(使用匿名内部类进行排序)
存取顺序一致Linked Hash Map
读取properties
泛型:编译时检查数据类型
减少数据类型的转换