Java集合的常见用法你知道多少?

一、集合与数组的区别【Java集合的常见用法你知道多少?】相同点:都是用来存储数据的 。不同点:1.集合带array的 , 底层由数组实现 , 还有一部分由其他方式(树、链表等)实现 。2.数组大小固定 , 而集合没有固定的大小 , 更方便存储 。3.数组只能放一种类型 , 集合不考虑泛型可以存多种类型 。4.集合放基本类型是通过装箱拆箱(包装类与基本数据类型的转换)来实现的 。(写泛形的时候不能用int , 而要用Integer)
二、几种常用集合之间的关系

Java集合的常见用法你知道多少?

文章插图
 
Map接口自成一系 , 是以键值对(Key,Value)方式存储数据的 , 属于双列集合 。Set接口的实现类: HashSet、LinkedHashSet、TreeSet 。List接口的实现类:ArrayList、LinkedList、Vector(线程安全) 。Queue接口的实现类 : LinkedList、PriorityQueue 。(没怎么用过 , 混个脸熟)Map接口的实现类:HashMap、TreeMap、Hashtable(线程安全) 。
三、每种集合的性质3.1Collection接口(单列)
Collection接口的常用方法:
add(T t) //添加指定元素 remove(T t) //删除指定元素 isEmpty() //集合是否为空 iterator() //获得迭代器(Iterator类型) , 一般用于遍历 size() //获得元素的个数 contains(T t) //是否包含某元素3.1.1.List 有序,可重复
List接口的常用方法
add(int index, T t) //向指定位置添加元素 remove(int index) //删除指定元素 get(int index) //获取指定位置的元素 set(int index, T t) //修改指定位置的元素 indexOf(T t) //获取指定元素的位置ArrayList 底层数据结构是数组 , 查询快 , 增删慢 。ArrayList的常用方法都是从List继承来的 , 就不多说了 。LinkedList 底层数据结构是链表 , 查询慢 , 增删快 。LinkedList 的常用方法:
getFirst() //获取第一个元素 getLast() //获取最后一个元素 offer(T t) //在最后位置追加元素 offerFirst(T t) //在开头位置追加元素 offerLast(T t) //在最后位置追加元素 removeFirst() //删除第一个元素 removeLast() //删除最后一个元素Vector 底层数据结构是数组 , 线程安全 , 效率低 。使用方法和ArrayList基本一样 。
3.1.2.Set 不可重复
方法:常用的都是从Collection继承到的 , 就轻松了许多 。HashSet (无序,唯一)底层数据结构是哈希表 。如何保证唯一:hashCode()和equals()LinkedHashSet(有序,唯一)底层数据结构是链表和哈希表 。链表保证有序 , 哈希表保证唯一 。TreeSet(有序 , 唯一)
底层数据结构是红黑树 。
1.如何排序(add()方法的重载):自然排序(无参add()调用Comparable的compareTo()方法)定制排序 (add(? extends Comparator)调用类实现的compare()方法)注:装载时若自然排序无法进行排序会报错 , 所以对装进集合的类实现Comparator接口进行自定义排序
2.如何保证唯一:根据比较的返回值是否为0来决定 。
3.1.3.Queue 有序(FIFO先进先出)
PriorityQueue 有序(定制排序、自然排序(也就是说不是所谓的FIFO) , 我用的少 , 所以不是特别了解)
3.2Map接口(双列)
put (K key,V value):把键与值添加到Map集合中remove (K key):删除key对应的值get(Kkey):根据指定的键 , 获取对应的值containKey(K key):判断是否包含指定的键entrySet() :返回Map.Entry型对象 , 用于遍历 。(entry.getKey()/entry.getValue()) keySet(K key):获取Map集合中所有的Key , 存储到set集合中(用于遍历)values(V value) :获取Map集合中所有的Value , 存储到Collection集合中(用于遍历)3.2.1HashMap
HashMap的常用方法都继承自Map接口 , 就不细说了 。HashMap是最常用的键值对存储容器 。
3.2.2.TreeMap
构造器:TreeMap()//创建一个空TreeMap , keys按照自然排序TreeMap(Comparator comparator)//创建一个空TreeMap , 按照自定义的comparator排序 。3.2.3.Hashtable(线程安全)
与HashMap的异同:同:Hashtable和HashMap使用方法基本一致 。异:HashMap线程不安全 , 而Hashtable是线程安全的;HashMap的K和V都可以为null , 而Hashtable的K,V都不能为null 。
四、总结1.没有其他要求时 , 最常用ArrayList、HashMap;2.不能重复时 , 用HashSet;3.需要线程安全时 , 用Vector、Hashtable 。




    推荐阅读