千家信息网

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

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,这篇文章给大家介绍数据类型中的Collection与Map是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Collection 接口类型1 List:有序(存入和
千家信息网最后更新 2024年11月19日数据类型中的Collection与Map是什么

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

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,接口,与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是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0