java 集合的使用笔记

来源:互联网 发布:千兆路由器和千兆端口 编辑:程序博客网 时间:2024/06/05 15:13

List  存储数据有序,可保存相同数据


Set 保存数据无序,不可保存相同数据,可用分于筛选相同数据。


hashSet 保存数据 无序 不重复 不可排序(效率较高)

treeSet   排序的set  使用:

public static void main(String[] args) {Set<Integer> tree_set=new TreeSet<Integer>();tree_set.add(1);tree_set.add(2);tree_set.add(3);tree_set.add(5);tree_set.add(4);tree_set.add(7);tree_set.add(11);tree_set.add(8);tree_set.add(9);tree_set.add(10);for(Integer i:tree_set) System.out.println(i);System.out.println("=====================");Set<String> tree_set2=new TreeSet<String>();tree_set2.add("a");tree_set2.add("c");tree_set2.add("b");tree_set2.add("m");tree_set2.add("d");tree_set2.add("s");for(String i:tree_set2) System.out.println(i);}
输出结果:123457891011=====================abcdms

1、TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值。 

2、HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束。 

3、HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的 String对象,hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例 。


LinkedHashSet   不可插入重复的数据,数据存储的顺序与插入的顺序一致

Set<Integer> set_linkedHashset=new LinkedHashSet<>();set_linkedHashset.add(5);set_linkedHashset.add(1);set_linkedHashset.add(7);set_linkedHashset.add(3);set_linkedHashset.add(5);for(Integer i:set_linkedHashset) System.out.println(i);

输出结果:5     1    7   3

ConcurrentSkipListSet   可根据构造函数的不同,使用自然排序还是按某种规则排序

CopyOnWriteArraySet  线程安全,插入操作效率不如hashSet



Map的选择与使用:
  

Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。
Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。 HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。

Hashtable与 HashMap类似,它继承自Dictionary类,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。(已经淘汰,改使用ConCurrentHashMap)

LinkedHashMap 是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造时用带参数,按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比 LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。

TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

一般情况下,我们用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。如果需要输出的顺序和输入的相同,那么用LinkedHashMap 可以实现,它还可以按读取顺序来排列.

HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为NULL,允许多条记录的值为NULL。

HashMap不支持线程同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致性。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。

Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtable在写入时会比较慢。

LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。

在遍历的时候会比HashMap慢TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iterator遍历TreeMap时,得到的记录是排过序的。

关于map的博客 参考:http://blog.csdn.net/seu_calvin/article/details/52653711