不知道为什么,昨天写的这篇文章不见了。早上重新补上来吧,,以后写东西还是得先写在电脑里面,然后在发布出来才行。
集合类一直让我感觉头痛,因为我老是搞混淆,可能是基础不够扎实的原因吧。现在专们花个时间来总结下,以后混淆了就直接来查看便是。那么,就先来看看各种集合类的比较表吧。
集合类比较表
是否有序
是否允许元素重复
Collection
否
是
List
是
是
Set
AbstractSet
否
否
HashSet
TreeSet
是(用二叉树排序)
Map
AbstractMap
否
HashMap
TreeMap
是(用二叉树排序)
常用的集合类介绍
Collection<–List<–Vector
Collection<–List<–ArrayList
Collection<–List<–LinkedList
Collection<–Set<–HashSet
Collection<–Set<–HashSet<–LinkedHashSet
Collection<–Set<–SortedSet<–TreeSet
Set(集):(HashSet)无序不重复
List(ArrayList和LinkedList)(列表):无序可重复
Map(映射,键值对):(HashMap)有序key值不重复
Collection:父接口Set:接口—实现类: HashSet、LinkedHashSetList:接口—实现类:LinkedList,Vector,ArrayListSortedSet:接口—实现类:TreeSet
1.List总结
(1)所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ];
(2) 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];
(3) 所有的List中可以有null元素,例如[ tom,null,1 ];
(4) 基于Array的List(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操作。
List:有序列表,允许存放重复的元素;
实现类:(1)ArrayList:数组实现,查询快,增删慢,线程不安全,轻量级;(2)LinkedList:链表实现,增删快,查询慢;(3)Vector:数组实现,线程安全,重量级。
例:levit应用中使用集合分布表:
集合类型
应用数量
ArrayList
184处
LinkedList
2处
Vector
0
分析:从以上的分析结果来看ArrayList是用的最多的,Vector没有用到(有性能问题,不建议使用)。
Vector和ArrayList的区别
线程安全线程安全
数组
List遍历的三种方法
ArrayList
public static void testArrayList(){//ArrayList 有序允许重复List<String> list = new ArrayList<String>();list.add("我是小颜");list.add("我是小颜");list.add("我是幕燃");list.add("我是幕燃2");//遍历第一种 getfor (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}//遍历第二种 IteratorIterator<String> it = list.iterator();while(it.hasNext()){String str = (String)it.next();System.out.println(str);}//遍历第三种 forfor (String str : list) {System.out.println(str);}}</span><span style="font-size:14px;"></span>
LinkedList
public static void testLinkedList(){//有序可重复List<String> list = new LinkedList<String>();list.add("我是哈哈");list.add("我是哈哈");list.add("我是幕燃");list.add("我是幕燃2");//遍历第一种 getfor (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}//遍历第二种 IteratorIterator<String> it = list.iterator();while(it.hasNext()){String str = (String)it.next();System.out.println(str);}//遍历第三种 forfor (String str : list) {System.out.println(str);}}
2.Set总结
(1)Set实现的基础是Map(HashMap);
(2) 无序集合,Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象,允许使用null元素;
(3)HashSet 的后台有一个HashMap;初始化后台容量;只不过生成一个HashSet的话,系统只提供key的访问;如果有两个Key重复,那么会覆盖之前的;
实现类HashSet:equals返回true,hashCode返回相同的整数;哈希表;存储的数据是无序的。
子接口SortedSet,对Set排序实现类 :TreeSet:使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序;二叉树实现的;
午餐,晚餐。或许吃得不好,可是却依旧为对方擦去嘴角的油渍。