数据类型中的Collection与Map是什么

2023-06-14,

这篇文章给大家介绍数据类型中的CollectionMap是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

Collection
  	接口类型1  List:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复。
  	接口类型2  Set:元素不能重复,默认不能保证顺序,提供有顺序实现。
  	接口类型3  Queue:线性表队列,有序,先进先出数据结构。
  	|--AbstractCollection:实现了Collection接口,不能创建实例,需要使用它的子实现类
  	       |--AbstractList:实现了List接口,有序,抽象类,功能强大
  	                 |--ArrayList:内部是数组数据结构,是不同步(非线程安全)的。替代了Vector。查询的速度快
  	                 |--LinkedList:内部是链表数据结构,是不同步的。增删元素的速度很快
  	                 |--Vector:内部是数组数据结构,是同步的。增删,查询都很慢,已不推荐
  	                           |--Stack:栈,先进后出,已不推荐
  	       |--AbstractQueue:实现了Queue接口,有序,迭代顺序可以自然排序或者在自定义类中实现"Comparable"接口重写Comparator方法进行排序。
  	                        当队列中元素为null时,抛出异常,而不是返回false或null
                           字类必须定义offer()方法,该方法不允许插入null值。依靠自然顺序的优先级队列还不允许插入不可比较的对象
  	                 |--PriorityQueue:优先权队列,每次从队列中取出的应是具有最高优先权的元素
  	                                  能够自动排序的队列,存储的元素排列并不是按照元素添加的顺序,而是内部会按元素的大小顺序进行排列
  	       |---------|--ArrayDeque:实现了Deque(双端队列,Queue的子接口),有序,非线程安全,推荐当作栈或队列使用。不允许放入null元素
  	                                添加,删除,取值都有两套接口,它们功能相同,区别是对失败情况的处理不同。
  	                                一套接口遇到失败就会抛出异常,另一套遇到失败会返回特殊值(false或null)。
  	       |--AbstractSet:实现了Set接口,无序,覆盖了 equals() 和 hashCode() 方法
  	                 |--TreeSet:实现了NavigableSet(SortSet子接口(Set子子接口))可导航接口,
  	                             基于TreeMap来实现,有序,可以自然排序或者在自定义类中实现"Comparable"接口重写Comparator方法进行排序。
  	                 |--HashSet:实现了Set接口,无序,采用hash算法
                               操作元素前,会先调用元素身上的hashcode方法,如果散列码发生碰撞,会触发equlas方法用于判定是否为同意个对象
                               JDK规定:如果两个对象相等,他们的hashcode值必然相等,如果两个对象的hashcode值相等,对象不一定相等
  	                           |--LinkedHashSet:双向链表结构,非线程安全,基于LinkedHashMap来实现,有序,序列顺序为插入顺序
 
 list集合是可以完成对元素的增删改查。
  List:特有的常见方法:有一个共性特点就是都可以操作角标。
  1,添加
  	void add(index,element);
  	void add(index,collection);
  2,删除;
  	Object remove(index):
  3,修改:
  	Object set(index,element);
  4,获取:
  	Object get(index);
  	int indexOf(object);
  	int lastIndexOf(object);
  	List subList(from,to);
LinkedList和ArrayList的区别: 
       LinkedList采用双向链表,如果需要对该种数据结构(集合)进行增删操作,使用LinkedList效率更高
       ArrayList是实现了基于动态数组的数据结构,而LinkedList是基于双向链表的数据结构
                对于随机访问的get和set,ArrayList要优于LinkedList,因为LinkedList基于指针的移动。
                ArrayList想要get(int index)元素时,直接返回index位置上的元素,
                而LinkedList需要通过for循环进行查找,
                虽然LinkedList已经在查找方法上做了优化,比如index < size / 2,则从左边开始查找,
                反之从右边开始查找,但是还是比ArrayList要慢。这点是毋庸置疑的。
       ArrayList想要在指定位置插入或删除元素时,主要耗时的是System.arraycopy动作,会移动index后面所有的元素;
       LinkedList主耗时的是要先通过for循环找到index,然后直接插入或删除。
Set存放不重复元素,默认不能保证顺序,提供有顺序
      /--HashSet:采用hash算法,无序
                  操作元素前,会先调用元素身上的hashcode方法,如果散列码发生碰撞,会触发equlas方法用于判定是否为同意个对象
                  JDK规定:如果两个对象相等,他们的hashcode值必然相等,如果两个对象的hashcode值相等,对象不一定相等
              /--LinkedHashSet:采用hash算法,有序
      /--TreeSet: 采用Tree算法,有序
Map:<key,value>:映射类,key-->value,接口,与collection对应
  |--AbstractMap:实现了Map接口
          |--HashMap:无序,非安全的,但collection框架提供方法能保证HashMap synchronized
                  |--LinkedHahMap:有序,非安全的,迭代顺序可以是插入顺序或者是访问顺序
          |--HashTable:无序,安全的,几乎等效于HashTable,但线程安全还要考虑到性能问题,应该采用ConcurrentHashMap
          |--TreeMap:有序,同一key值默认为同一对象,迭代顺序可以自然排序或者在自定义类中实现"Comparable"接口重写Comparator方法进行排序
          |--EnumMap:枚举映射,()内为枚举类,有序,迭代顺序为枚举顺序
          |--IdentityHashMap:不是Map的通用实现,允许存放相同key值,仅当两key值地址一样是才认为相等无序,非安全的,允许key和value都为null
ashTable和HashMap的区别:HasnMap几乎完全等效HashTable
           HashTable线程安全,所有的操作是线程同步的,不需要线程同步的情况下使用HashMap,
           如果高并发情况下,线程安全还要考虑到性能问题,应该采用ConcurrentHashMap。
           HashMap非线程安全,HashMap允许存放null的value,允许存在null的key
           HashTable 允许存放null的value,不允许存在null的key
           迭代操作:HashMap快速失败,HashTable安全失败

关于数据类型中的Collection与Map是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。