Collection接口
Collection是接口,提供容器的常用方法 1) 添加 List接口 :有序集合ArrayList LinkedList 类似于C++中std::vector 和 std::list ArrayList的内部实现是基于基础的对象数组的,LinkedList基于链表的数据结构。? 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。? 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。? ArrayList和LinkedList在性能上各有优缺点,都有各自所适用的地方,总的说来可以描述如下:? 1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元 素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。 2.在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。 3.LinkedList不支持高效的随机元素访问。 4.ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间 Set接口 :无序(存储和取出的顺序)和唯一.TreeSet?底层数据结构是二叉树(红黑树) 特点: 元素唯一,且能对元素进行排序 对自定义数据对象排序时 需要该类实现?Comparable 接口 的compareTo 方法 1 public class Student implements Comparable<Student> { 11 int r1 = r==0?this.getName().compareTo(o.getName()):r;//如果年龄相同,在根据名字的字典顺序来比较 HashSet : 底层实际上是一个HashMap,HashMap底层采用了哈希表数据结构 若要元素有序则可以使用 LinkedHashSet :链表保证了元素有序,哈希表保证了元素唯一. 特点: 元素唯一,且能对元素进行去重?? 比较时 只有hashCode一致时才会调用方法equals() 进行比较确定该元素是否唯一 Student stu1 = new Student("1","JACK"); Student stu2 = new Student("1","JACK"); Student stu3 = new Student("3","JIM"); System.out.println(stu1.hashCode()); System.out.println(stu2.hashCode()); stu1和stu2的hashCode是不一样的,为什么呢?因为这两个对象是New出来的,引用地址不一样。故不会调用方法equals() 导致元素不唯一; 就需要重写hashCode()和euqals()方法? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |