1.数组:不可改变,当我们确认了要存储数据的长度,可用
2.集合类Collection:不确定长度,像一个容器(java.util包 后来java.util.concurrent为多线程而生)
2.1 List(有序、可重复)
1)、ArrayList 线性表 可改变的数组
2)、LinkedList 双向链表
a.继承了AbstractSequentialList ,实现了List(能够列表操作)、Deque(能够当双端队列使用)、Cloneable(能克隆)、Serializable(支持序列化,能通过序列化去传输),如图:
b.Node内部类:一个节点包含前一个节点和后一个节点,最终形成链表
c.添加方法很多,如add(e)添加到最后一个
d 删除方法很多,如remove()删除第一个
注:get/set方法时,ArrayList优于LinkedList,因为LinkedList要移动指针;add/remove时,LinkedList优于ArrayList,因 为 ArrayList要移动数据
2.2 Set(无序,不可重复)
set集合像一个罐子,丢进罐子的元素之间没有明显顺序,元素在添加新元素时equal()判断元素是否重复,重复则添加失败
1)、HashSet 无需、不可重复、元素可为null
添加元素时 通过equal()判断不同可添加 ,调用hashcode()方法得到hashcode值,根据hashcode值确定 该元素添加的位置
2)、LinkedHashSet 有序,不可重复、 有HashSet特点,同时以链表方式维护顺序,所以以添加次序添加
3)、TreeSet 有序 不可重复 使用红黑树算法,擅于范围查找,实现了Compareable接口,所以不能插入null,且升序排序
3 Map
HashMap
LinkedHashMap
HashTable
TreeMap