这篇文章给大家介绍数据类型中的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>:映射类,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是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。