collection(list,set,map)集合详解

一:java集合的体系结构如下:

Java集合大致分为Set、List、Queue、Map四个体系 。Collection: List和Set,Queue继承自Collection接口。


 

|--List:
|--ArrayList
|--Vector
|--LinkedList

|--Set:
|--HashSet
|--TreeSet

|--LinkedHashSet

|--Queue: 队列集合,有PriorityQueue类

List:有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。

Set:不允许元素重复。HashSet和TreeSet是两个主要的实现类。

Map:也属于集合系统,前两个继承至collection接口,Map为独立接口。Map是key对value的映射集合,其中key列就是一个集合。key不能重复,但是value可以重复。HashMap、Hashtable,TreeMap,LinkedHashMap前三个主要的实现类。

  • TreeMap是有序的,HashMap和HashTable是无序的。
  • Hashtable的方法是同步的,HashMap的方法不是同步的。这是两者最主要的区别。

Collection的功能概述:

A:添加功能:boolean add(E e)确保此 collection 包含指定的元素(可选操作)。
B:删除功能:boolean remove(Object o)从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
C:判断功能:
      boolean isEmpty()如果此 collection 不包含元素,则返回 true。 
      boolean contains(Object o)如果此 collection 包含指定的元素,则返回 true
D:获取功能:Iterator<E> iterator()返回在此 collection 的元素上进行迭代的迭代器。
E:长度功能:int size()返回此 collection 中的元素数。
F:交集(了解):boolean retainAll(Collection<?> c)仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
G:把集合转数组(了解):Object[] toArray()返回包含此 collection 中所有元素的数组。

— List 有序,可重复

ArrayList
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高
Vector
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低
LinkedList
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高
—Set 无序,唯一

:HashSet和LinkHashSet允许存在null值,TreeSet中插入null数据时会报NullPointerException。

:HashSet的底层数据结构是哈希表,通过hashCode()和equals()方法保证集合元素的唯一性,首先用hashCode()比较的是两个对象的哈希值是否相同,如果相同则继续比较equals,equals比较的是两个成员变量的值是否相同,相同返回true不添加,否则则添加集合元素。一般在用hashSet的时候有重复元素时候,需要重写equals方法。

:有元素A和B,当通过hashCode()得到的哈希值相同的时候,只要equels不相等,根据“冲突检测机制”,会在A元素的内部索引位置新建一个链接表,将A和B串起来放在该位置。

HashSet
底层数据结构是哈希表。(无序,唯一)
如何来保证元素唯一性?
1.依赖两个方法:hashCode()和equals()

LinkedHashSet
底层数据结构是链表和哈希表。(FIFO插入有序(按插入顺序排序的),唯一)
1.由链表保证元素有序
2.由哈希表保证元素唯一

TreeSet
底层数据结构是红黑树。(唯一,有序)
1. 如何保证元素排序的呢?
自然排序
比较器排序
2.如何保证元素唯一性的呢?
根据比较的返回值是否是0来决定

java中List、Array、Map、Set等集合相互转:

List转换为Array:

List<String> list = new ArrayList<>();list.add("AAAA");list.add("BBBB");list.add("CCCC");list.add("DDDD");String [] array = list.toArray(new String[list.size()]);

Array转换为List:

String[] countries = {"AAAA", "BBBB", "CCCC", "DDDD"};List list = Arrays.asList(countries);

Map的Key值转换为List:

Map<Integer,String> map = new HashMap<>();map.put(1,"AAAA");map.put(2,"BBBB");map.put(3,"CCCC");map.put(4,"DDDD");List<Integer> list = new ArrayList<Integer>(map.keySet());

Map的Value值转换为List:

Map<Integer,String> map = new HashMap<>();map.put(1,"AAAA");map.put(2,"BBBB");map.put(3,"CCCC");map.put(4,"DDDD");List<String> list = new ArrayList<String>(map.values());

 

posted on 2019-07-05 18:08  丹丹蛋蛋 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/2019lgg/p/11139952.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值