2019独角兽企业重金招聘Python工程师标准>>>
####集合list set Map的个人理解 首先集合说的对一类数据的存储容器,对象都是引用类型并不是基本数据类型
collection 接口 list和set都需实现它 collections 抽象了一些集合的基本功能,reverse sort swap等
具体结构如下
ps:自己用画图工具简单画的,勿喷!
解释
实现List接口有ArrayList,LinkedList,Vector 1: List与其他集合最主要的区别:元素是可以重复,并且数据可以随机访问也就是根据索引值得到get(index),且存储有序的 2: ArrayList和Vector 区别:ArrayList是线程不安全的,但效率高,Vector线程安全,效率低,都是线性结构, 3:ArrayList和LinkedList:ArrayList是线性结构以数组形式存在,利于查询和修改;LinkedList数据结构是链式存储,指针指向后面的元素,利于添加和删除
实现Set接口有HashSet,LinkedHashSet,TreeSet 1: Set特性:数据唯一,存取相同的数据时,不添加。数据无序 2: HashSet是无序的
/** HashSet 是无序的*/Set<String> hashset = new HashSet<String>();for (int i = 0; i < 10; i++) {hashset.add(i + "");}for (String hashsetstring : hashset) {System.out.println(hashsetstring);}
3: LinkedHashSet是HashSet的子类,去重复,有序
/** LinkedHashSet 打印是按照存放次序输出的*/Set<String> linkhashset = new LinkedHashSet<String>();for (int i = 0; i < 10; i++) {linkhashset.add(i + "");}for (String linkhashsetstring : linkhashset) {System.out.println(linkhashsetstring);}
4:TreeSet
- TreeSet存储对象的时候, 可以排序, 但是需要指定排序的算法
- Integer能排序(有默认顺序), String能排序(有默认顺序), 自定义的类存储的时候出现异常(没有顺序)
- 如果想把自定义类的对象存入TreeSet进行排序, 那么必须实现Comparable接口
- 在类上implement Comparable
- 重写compareTo()方法
- 在方法内定义比较算法, 根据大小关系, 返回正数负数或零
- 在使用TreeSet存储对象的时候, add()方法内部就会自动调用compareTo()方法进行比较, 根据比较结果使用二叉树形式进行存储
- Map 采用的是键值对形式存储数据 1:实现Map的有HashMap,LinkedHashMap,TreeMap,IdentityMap,WeakHashMap
一般情况下,我们用的最多的是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时,得到的记录是排过序的。
#####总结
- 最后以三张图片总结下List和Set,Map最重要的区别(亮点,鼠标放在图片上)