浅谈集合

来源:互联网 发布:保险资产管理公司 知乎 编辑:程序博客网 时间:2024/06/05 07:40
集合有List、Set、Map这三种,都是接口。
List、Set是接口Collection的子类。

Collection 和 Collections的区别
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作

List集合
LIST是一个有序且允许重复数据的集合,可以通过索引来访问任何元素。
(1)arrayList:使用数组的方式存储数据,按序号索引,查询速度快,插入,删除数据要涉及到数组元素移动等内存操作,速度较慢。
(2)Vector :使用数组的方式存储数据,按序号索引,查询速度快,插入,删除数据要涉及到数组元素移动等内存操作,速度较慢,且Vector中的方法由于添加了synchronized修饰,所以是线程安全的,故性能上比ArrayList差。
(3)linkedList:使用双链表的方式存储数据,按序号索引数据需要进行前向或后向遍历,但是插入需要记录本项的前后项即可,所以插入速度较快。

list本身是个接口,不能直接被构造:
List list =new List(); // 不能被构造,故是❌
List list =new ArrayList(); //arrayList是一个类,实现List接口,可以被构造,故是✅

实现方式:
List<String> list = new ArrayList<String>();
(1)for(int i=0; i<list.length; i++){}
(2)Iterator it = list.iterator(); while(it.hashNext()){}
(3)for(String str: list){}

Set集合
Set是一个无序且不允许重复的集合。主要用于去重复的场景。
(1)hashSet:使用hashCode值决定元素的存储位置,实现Set接口,无序,允许唯一的NULL值,非同步的,所以是非线程安全的。判断两个对象是否相等,用equals()方法。
(2)linkedHashSet:使用hashCode值决定元素的存储位置,实现Set接口,使用链表维护元素的次序,迭代访问Set集合的全部元素时,inkedHashSet的性能比hashSet好,插入数据时,性能比hashSet差些。
(3)TreeSet:实现Set子接口SortedSet,可以实现自动排序的类型,支持自然排序和定制排序两种。判断两个对象是否相等,用equals()方法或者用CompareTo方法。

判断两个对象是否相等,用equals()方法,返回true,表示相等,返回false,表示不相等。
判断两个对象是否相等,用compareTo方法,a.compareTo(b),返回0,表示相等,返回正数,表示a>b,返回负数,表示a<b。

两个对象相等,那么hashCode会相等,但是反过来,hashCode相等,对象不一定相等。

友情链接:http://www.cnblogs.com/wl0000-03/p/6019627.html

实现方式:
Set<String> set = new HashSet<String>();
(1) for(String str : set){}
(2)Iterator it = set.iterator(); while(it.hashNext()){}

Map集合
Map集合是以key-value的形式存储数据。key是唯一的,允许唯一的一个NULL key,也允许NULL值。
(1)hashMap:根据hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。
(2)lindedHashMap:是HashMap的一个字类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的,也可以在构造时用带参数,按照应用次数排序。LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。
(3)TreeMap:实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。
(4)weakHashMap:采用拉链法实现的。一般用于单线程,非线程安全。

友情链接:http://blog.csdn.net/stemq/article/details/66478301

遍历实现方式:

结果输出:

单纯遍历key值:

结果输出:


单纯的遍历value值:

结果输出:


HashMap 和 HashTable的区别:
(1)都实现是Map接口
(2)HashMap允许唯一的NULL key,也允许NULL值,不支持线程同步,是非线程安全的,如果需要同步,可以用 Collections的synchronizedMap
方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。
(3)HashTable不允许NULL key,NULL值,支持线程同步,是线程安全的
原创粉丝点击