一.开头先总结一下:
①你不需要可变容器的功能,首选数组(数组比所有容器都快)
②一般情况下,没特别需要,选ArrayList(遍历速度很快)
③如经常需要往List中间插入数据或删除数据,选LinkedList
④对于set集合,首选HashSet(添加和查询速度很快)
⑤对于set集合,如果需要排序,选择TreeSet
⑥对于set集合,LinkedHashSet遍历更快
⑦map的选择,同上面set集合的选择方式
二.set集合
1.特点:
无序(没有下标) 集合中的元素不重复,存储顺序和取出来的顺序不一定一致
2.hashset
是按照哈希值来存的所以取数据也是按照哈希值取得,实际是将对象用Map.Entry类型包装了;在将对象存入HashSet的时候,自动调用这个对象的hashCode()方法,结果经过计算后,把此结果作为数组的下标,然后将对象存入数组的这个位置。
如果两个对象的hashCode()计算之后的结果相同,而两个对象实际不相等(equals),则后放进去的对象链接在原对象的后面;两个对象相等,则后放的对象添加不进去。
3.常见用法:
hashset.add(E e):返回boolean型,如果此 set 中尚未包含指定元素,则添加指定元素;如果此 set 已包含该元素,则该调用不更改 set 并返回 false。
hashset.clear():从此 set 中移除所有元素。
hashset.remove(Object o):如果指定元素存在于此 set 中,则将其移除。
hashset.isEmpty():如果此 set 不包含任何元素,则返回 true。
hashset.contains(Object o):如果此 set 包含指定元素,则返回 true。
hashset.size():返回此 set 中的元素的数量(set 的容量)。
三.Map集合
1.常用的Map集合是HashMap
2. 介绍
Map集合就是可以任意指定索引数据类型的集合, 数组和list集合是固定使用int类型作为索引的容器
3.Map集合的特点:
(1) map集合一次要存储两个元素, 第一个是key(键-索引), 第二个内容是value(值)
(2) map集合的键是不能重复, 如果多次往同一个索引存储元素, 以最后一次存储为准, 后面存储的内容会把前面存储的内容覆盖
(3) map集合中的值是可以重复的
4. 常用方法:
(1) put(key,value): 把键和对应的值存储到集合中
(2) get(key): 根据键取对应的值
(3) isEmpty(): 判断集合是否为空
(4) clear(): 清空集合中的所有元素
(5) containsKey(key): 判断集合中是否包含指定的键
(6) containsValue(value): 判断集合中是否包含指定的值
(7) remove(Object key): 根据键删除键和对应的值
(8) size(): 获取集合中的元素个数
(9) keySet(): 获取到map集合中的所有键, 装到一个Set集合中, 遍历这个集合可以得到每一个键
(10) entrySet(): 把集合中的key和value封装成Entry对象并存储到一个Set集合中,返回该集合
(11) values(): 把集合中所有value存储到一个Collection集合中并返回
四.ArrayList
-
1.而LinkedList索引时需要从头遍历从而找到对应的数据,顺序读写多的场景使用ArrayList;ArrayList底层使用数组实现,容量不足时需动态扩容;
(对比LinkedList底层使用双向链表实现,无大小限制) -
2.创建引用类型的变量方式
数据类型<集合存储的数据类型> 变量名 = new 数据类型<集合存储的数据类型>();
ArrayList obj = new ArrayList();
集合存储的数据类型:要将数据存储到集合的容器中。创建集合引用变量的时候,必须要指定好存储的类型是什么。
- 3.变量名.方法即可调用
注意尖括号中的类型必须要写。
注意:ArrayList存储的是引用类型,那么8个基本的类型对应8个引用类型。
五.LinkedList数据结构是链表
链表数据结构的特点是每个元素分配的空间不必连续、插入和删除元素时速度非常快、但访问元素的速度较慢。双向链表结构,由存储元素的结点连接而成,每一个节点都包含前一个节点的引用,后一个节点的引用和节点存储的值。当一个新节点插入时,只需要修改其中保持先后关系的节点的引用即可
1.常用方法
(1)add(E): 往集合中添加一个元素
(2)add(index,E): 把元素添加到指定的位置, 原来的内元素会被挤到后面
(3)get(index): 通过索引获取集合中对应的元素
(4)size(): 获取集合的大小、集合中元素个数
(5)remove(index): 删除指定索引的元素, 返回被删除的元素
(6)remove(Object): 删除集合中的指定对象, 如果有多个相同的对象, 只会删除第一个.
(7)contains(E): 判断集合中是否包含指定的元素
(8)indexOf(E): 获取元素在集合中第一次出现的索引
(9)lastIndexOf(E): 获取元素在集合中最后一次出现的索引
(10)isEmpty(): 判断集合中的元素是否为空
(11)set(index,E): 把指定索引位置的元素覆盖, 返回的是被修改的元素
(12)clear(): 清空集合中的所有元素
(13)toArray(): 把集合转换成Object数组,注意不能转换成其他数组!
2、添加元素到LinkedList
LinkedList提供了多个添加元素的方法:
●boolean add(E e)
在链表尾部添加一个元素,如果成功,返回true,否则返回false。
●void addFirst(E e)
在链表头部插入一个元素。
●addLast(E e)
在链表尾部添加一个元素。
●void add(int index, E element)
在指定位置插入一个元素。
3.从LinkedList中删除元素
LinkedList提供了多个删除元素的方法:
●boolean remove(Object o)
从当前链表中移除指定的元素。
● E remove(int index)
从当前链表中移除指定位置的元素。
● E removeFirst()
从当前链表中移除第一个元素。
● E removeLast()
从当前链表中移除最后一个元素。
● E remove()
从当前链表中移除第一个元素,同removeLast()相同。
4、从LinkedList中获取元素
LinkedList提供了多个获取元素的方法:
● E get(int index)
从当前链表中获取指定位置的元素。
● E getFirst()
从当前链表中获取第一个元素。
● E getLast()
从当前链表中获取最后一个元素。
5、LinkedList的遍历方法
LinkedList可以通过迭代器、foreach语句、for循环语句等方法遍历集合的所有元素。