Java知识总结--集合篇

集合(List,Set,Map)


目录

集合(List,Set,Map)

1.1-List

1.2-Set

1.3-Map

1.4-HashMap遍历怎么遍历?

1.5-HashMap使用场景

1.6- HashMap 还是 TreeMap选择

1.7-HashMap 的实现原理

1.8-HashSet 的实现原理

1.9-实现数组和 List 之间的转换

1.10-Array 和 ArrayList 的区别

1.11-迭代器 Iterator

1.12-Iterator的使用和特点

1.13- Iterator 和 ListIterator 的区别


1.1-List

List下有ArrayList,Vector,LinkedList,List是有序的可以重复的

       1:ArrayList

  •         底层使用的是数组,所以查询特定的元素特别快,插入删除慢,线程不安全
  •         初始化容量:10

       2:Vector

  •         底层使用的是数组,线程安全的
  •         初始化容量:10

       3:LinkedList

  •         底层使用的是链表,所以插入和删除特别快,查询慢

1.2-Set

无序的,不可以重复的,根据equals和hashCode判断,就是如果一个对象要 存储在set中,必须重写equals和hashCode方法

1:HashSet

  • 底层是HashMap
  • 向HashSet添加元素就是把元素作为键添加到底层的HashMap中

2:TreeSet

  • TreeSet实现了SortedSet接口,可以根据元素自然排序,要求集合中的元素必须是可比较的(Comparator与Comparable)
  • TreeSet底层是TreeMap
  • 向TreeSet添加元素就是把元素作为键添加到底层的TreeMap中

1.3-Map

Map是按key-value对的形式存储数据,Mapkey不允许重复

1:HashMap

  • 底层是数组+链表,键与值都可以为null,线程不安全

2:CurrentHashMap(jdk1.5后推出的

3:HashTable

  • 底层数组+链表,无论key还是value都不能为null,线程安全,效率低

1.4-HashMap遍历怎么遍历?

两种方式遍历:使用EntrySet遍历;使用KeySet 遍历


1.5-HashMap使用场景

比如说读取参数,在服务之间传递一些键值对时使用。


下面内容借鉴于:https://blog.csdn.net/qq_41701956/article/details/103253168


1.6- HashMap 还是 TreeMap选择

对于在Map中插入、删除和定位元素这类操作,HashMap是最好的选择。然而,假如你需要对一个有序的key集合进行遍历,TreeMap是更好的选择。基于你的collection的大小,也许向HashMap中添加元素会更快,将map换为TreeMap进行有序key的遍历。


1.7-HashMap 的实现原理

HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 

HashMap的数据结构: 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。

当我们往Hashmap中put元素时,首先根据key的hashcode重新计算hash值,根绝hash值得到这个元素在数组中的位置(下标),如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放入链尾.如果数组中该位置没有元素,就直接将该元素放到数组的该位置上。

需要注意Jdk 1.8中对HashMap的实现做了优化,当链表中的节点数据超过八个之后,该链表会转为红黑树来提高查询效率,从原来的O(n)到O(logn)


1.8-HashSet 的实现原理

  • HashSet底层由HashMap实现

  • HashSet的值存放于HashMap的key上

  • HashMap的value统一为PRESENT


1.9-实现数组和 List 之间的转换

  • List转换成为数组:调用ArrayList的toArray方法。
  • 数组转换成为List:调用Arrays的asList方法。

1.10-Array 和 ArrayList 的区别

  • Array可以容纳基本类型和对象,而ArrayList只能容纳对象。 

  • Array是指定大小的,而ArrayList大小是固定的。 

  • Array没有提供ArrayList那么多功能,比如addAll、removeAll和iterator等。


1.11-迭代器 Iterator

迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。


1.12-Iterator的使用和特点

Java中的Iterator功能比较简单,并且只能单向移动:

  • (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

  • (2) 使用next()获得序列中的下一个元素。

  • (3) 使用hasNext()检查序列中是否还有元素。

  • (4) 使用remove()将迭代器新返回的元素删除。

Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。


1.13- Iterator 和 ListIterator 的区别

  • Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。 
  • Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。 
  • ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。

//持续更新。。。。。。 

猜你喜欢

转载自blog.csdn.net/weixin_44519467/article/details/106747514