java语言的集合

xiaoxiao2021-03-01  17

集合: 性质:是一个用于存储多个对象的容器,容器内的对象就是元素容器内存储的都是元素的地址,集合框架中含多种接口,抽象类 实现类等来满足我们的需求,(元素必须是引用类型的数据,不能是基本数据类型的数据)

Collection

集合的顶级父接口     常用方法:boolean  add(E e)                       int size()                       boolean addAll(Collection c)                       void clear()                       boolean contains(Object obj)                       boolean containsAll(Collection c)                       boolean isEmpty()                       boolean remove(Object o)                       boolean removeAll(Collection c)                       boolean retainAll(Collection c) List(列表): 性质:此接口对应的实现类的特点是:有序的,可以重复的     常用方法:void add(int index,E element)                  E get(int index)                int indexOf(Object obj)                E set(int index,E newElement)                boolean remove(int index)                List<E> subList(int fromIndex,int endIndex)           此方法在堆中不会产生新的集合对象。                   变量引用的父集的一部分。                   修改子集,会影响父集             int lastIndexOf(Object obj) 实现类:ArrayList(性质:底层是基于动态数组的数据结构,有序存放)        LinkedList(底层是基于双链表的数据结构,每一个存储单元都要涉及到其他两个引用)        优缺点:在执行get()/set()时,ArrayList的效率高,LinkedList需要移动指针,效率低                在增加/删除操作时,LinkedList效率高,ArrayList效率低(需要扩容,移动元素)。        Vector:是一个比较古老的集合类型,线程安全,但是效率特别低,不建议使用 Stack(栈): 常用方法:void push(E e)将项目推送到此堆栈的顶部。           E pop()删除此堆栈顶部的对象

Queue(队列): 性质:通常是一段进(offer)一段出(poll)     常用方法:boolean offer(E e)               E pool()               E peek() 子接口:Deque(双端队列)性质:两端都可以进,也都可以出 常用方法:boolean offerFiret(E e):在deque的前面插入对象e,违反容量限制返回false          boolean offerLast(E e):在deque的后面添加对象e,违反容量限制返回false          E pollFirst():检查并删除deque第一个元素          E pollLast():检查并删除deque最后一个元素          E peekFirst():返回队首元素          E peekLast():返回队尾元素 Set接口: 性质:无序,存储的元素与添加顺序无关,不可重复(使用equals方法来判定是否重复)       能存储null元素,只能存储一次       当向集合中 

子类:HashSet(通过实现hash算法的一种数据结构,无序,不重复)         LinkedHashSet(通过实现hash算法的一种数据结构,但是通过链表来维持顺序。顺序与添加顺序一致)         TreeSet(使用二叉树的一种数据结构,顺序与自然排序有关系,支持定制排序) Hash算法机制 当向集合添加元素时我们需要调用equals方法来一一校验。但是元素过多时,我们校验的次数明显增多,因此效率就很低。         提高效率的方法:我们为元素对象,提供一个hash算法(哈希值),用于返回此元素的一个hash值(int值)。并且在集合所占的内存中开辟很多小的区域         每个区域用于存储一定范围哈希值的元素。

重写HashCode方法:        重写规则:尽可能的让所有的成员变量都参与运算,                          尽可能的避免出现hash值碰撞 注意:        重写的必要性:    (1)如果重写了equals(), 有必要重写hashCode方法    (2)如果equals()返回true, hashCode返回值有必要相同    (3)如果equals()返回false,hashCode返回值不一定相同,             如果返回值不同,可以提高检索的效率         反过来说:     (1)hashCode值相同,equals方法可能不同     (2)hashCode值不同,equals方法一定不同 

转载请注明原文地址: https://www.6miu.com/read-4050255.html

最新回复(0)