JAVA集合的基本描述:
Java 中的集合框架,主要是由Java.util包中的集合接口与实现类组成,主要包括 Collection(单列集合) 和 Map(双列集合) 以及相关实现类,并且包括Iterator迭代器 Colletions等工具类。
Collection接口:单列集合
定义了存取一组对象的方法的集合,包含List接口和Set接口。
List:有序列表集合,元素可以重复,索引从0开始
主要实现类有: Arraylist:底层是数组 特点:查询快增删慢,线程不安全效率高 linkedlist:底层是双向链表,特点:查询慢增删快 Vector:和Arraylist相似,但线程安全效率低
Set:无序散列集合,元素不可以重复
Set的主要实现类有: HashSet:无序(新增顺序和获取顺序不一定一致)。底层是哈希表(数组+链表+红黑树) LinkedHashSet:有序。底层是链表+哈希表 TreeSet:可以排序。底层是红黑树
注:HashSet底层是HashMap,LinkedHashSet底层是LinkedHashMap,TreeSet底层是TreeMap。
Set集合的新增过程:
计算新增元素的哈希值(十进制的地址值),调用hashCode()方法;
通过哈希值%数组长度,去确定元素新增的索引值位置
如果该位置没有元素:直接新增 如果该位置有元素:判断这两个元素是否相同 如果不相同:挂到最后一个元素下面 如果相同:不新增 判断元素是否相同的标准: 比较哈希值相同 && (地址值相同 || equals相同)
总结:如果自定义类型的对象,我们希望添加到HashSet集合中
我们认为成员变量的值相同,就为同一个元素,
则需要覆盖重写hashCode方法和equals方法
Collection接口中List,Set中的公共方法:
方法描述add()将元素插入到指定位置clear()删除集合中的所有元素contains()判断元素是否存在remove()删除集合中的某个元素size()判断元素数量isEmpty()判断集合是否为空toArray()将集合转换为数组replace()将给定的操作内容替换掉数组中的某一个元素
Java Iterator(迭代器)
Iterator 类位于 java.util 包中,是一个接口,用于循环遍历集合中的元素,可用于迭代 ArrayList 和 HashSet 等集合。
迭代器 Iterator 的基本方法是 next 、hasNext 和 remove。
- 调用 Iterator.next() 会返回迭代器的下一个元素,并且更新迭代器的状态(获取下一个元素)。
- 调用 Iterator.hasNext() 用于判断集合中是否还有元素。
- 调用 Iterator.remove() 将迭代器返回的元素删除(获取谁,删除谁)。
注意:通过迭代器遍历集合的失败,不能通过集合对象增、删元素
如果要删除可以通过迭代器对象的删除方法删(使用Iterator.remove() )。
Iterator的具体使用如下图所示:
遍历集合也可以使用增强for循环:
增强for循环:遍历集合的时候,底层就是迭代器
for(数据类型 变量名:集合名){
//数据类型:集合的泛型
}
Collection集合图示:
Map<K,V>接口:双列集合
采用“key-value”保存。
- 特点:
- 一个元素是有一个K,一个V两部分组成;
- K V可以是任意的引用数据类型;
- 一个K对应唯一的一个V,K不能重复。
- 常用实现类:
- HashMap:底层是哈希表。无序,线程不安全,效率高
- LinkedHashMap:底层是链表+哈希表。有序
- TreeMap:底层是红黑树。可排序
- Hashtable:线程安全,效率低
Map集合图示:
Collections工具类
Collections 是一个操作 Set、List 和 Map 等集合的工具类
Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作
方法描述addALL(Collection,T...);将所有元素插入到集合中shuffle(List):对 List 集合元素进行随机排序sort(List)根据元素的自然顺序对指定 List 集合元素按升序排序sort(List,Comparator)根据指定的 Comparator 产生的顺序对 List 集合元素进行排序如何选择集合?
根据集合的特点来选用:需要根据键值获取到的元素值时就选用Map接口下的集合,需要排序时选用TreeMap,不需要排序时选用HashMap,需要保持有序选择LinkedHashMap。
只需要存放元素值时,就选择实现Collection接口的集合,需要保证元素唯一时选择实现Set接口的集合比如TreeSet或者HashSet,不需要就选择实现List接口的比如Arraylist或者LinkedList。
版权归原作者 星星慢 所有, 如有侵权,请联系我们删除。