java第八章:集合容器

                     Collection接口(有List和Set两个子接口,不唯一,无序)

              List接口(不唯一,有序)                       Set接口(唯一,无序)  

          三个实现类:ArrayList    LinkedList  Vector          三个实现类:HashSet                 TreeSet

                                  HashSet的子类:LinkedHashSet

 

Collection接口中常用的方法有:add(),size(),iterator(),remove()...

ArrayList是一种可变长度的数组,属于线性结构,本质上是分配连续的数组,非线性安全的;        Vector和ArrayList相比

优点是:访问查询,遍历元素快。                                   线性安全,效率相对比ArrayList低

缺点是:插入和删除元素慢,因为需要大量移位,查询内容效率低下。

LinkedList是一种链表结构,在内存中的存储位置是不连续的,与ArrayList相反。

优点是:插入,删除元素快

缺点是:访问查询,遍历元素慢,因为没有固定下标

特有的方法:removeFirst,getFirst,setFirst.

      removeLast,getLast,setLast.

泛型<>:限定集合中元素的类型,这样能容纳的元素类型就固定了;

语法eg:List<Student> list = new ArrayList<Student>();

作用是:1.避免强制转换 2.消除代码中的黄色警告!

Iterator<E>类:迭代器,用来遍历集合中的元素(尤其是对不能通过下标查找元素的集合)

有两个常用方法:iterator.hasNext();-->判断集合中是否有下个元素;

        iterator.next();--->取到元素;

Stack类:栈(Last In Fist Out/LIFO或First In Last Out/FILO)--->后进先出或先进后出

入栈(压栈):将元素添加栈中,push();

出栈(弹栈):将元素从栈定移除,pop();

而队列:先进先出!

 

HashSet:是一种基于哈希表的散链存储结构,无序,唯一

优点:添加速度快、查询速度快,删除速度快!  缺点:无序(添加顺序)

hashcode:哈希码,每个元素都有固定的哈希码值,数字的哈希码就是数字本身,Y=K(X)=X%7.

hashcode 和equals的关系:

1.在HashSet集合中实现添加元素时,会先调用Object类中的hashcode()方法,计算出当前对象的哈希码,确定其摆放位置。然后与集合中对象的hashcode进行比较,如果哈希码相同,则会调用Object中的equals()方法,比较内容是否相同!

2.如果hashcode不同,将不再调用equals方法;

3.如果equals()相同,那么hashcode肯定相同;哈希码相同,equals结果不一定相同!

4.如果向Set集合中添加对象时,想要去掉重复项,需要重写Object类中的hashcode()和equals()方法;

原文地址:https://www.cnblogs.com/SXTzhaopengda/p/7003524.html