java集合,List中的ArrayList,LinkedList,set集合的HashSet,Map集合HashMap

java集合,List中的ArrayList,LinkedList,set集合的HashSet,Map集合HashMap

一.开头先总结一下:

①你不需要可变容器的功能,首选数组(数组比所有容器都快)
②一般情况下,没特别需要,选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个引用类型。
java集合,List中的ArrayList,LinkedList,set集合的HashSet,Map集合HashMap

五.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循环语句等方法遍历集合的所有元素。

5.1迭代器iterator接口中的方法有:

java集合,List中的ArrayList,LinkedList,set集合的HashSet,Map集合HashMap