Java 容器

一、Collection

列表(List):按照一定次序(对象进入的顺序)排列的对象集,对象之间有次序关系,对象可以重复。

集合(Set):对象唯一,不会重复;元素没有顺序。

队列(Queue):根据排队规则确定对象的顺序。

    int size();

    boolean isEmpty();

    boolean contains(Object o);

    Iterator<E> iterator();

    Object[] toArray();

    boolean add(E o);

    boolean remove(Object o);

    boolean containsAll(Collection<?> c);

    boolean addAll(Collection<? extends E> c);

    boolean removeAll(Collection<?> c);

    boolean retainAll(Collection<?> c);

    void clear();

    boolean equals(Object o);

 

1、List接口

Collection接口的子接口。

特点:实现该接口的类中的元素有顺序,可重复

List容器中的元素都有一个对应的整数型的序号(下标),用以记录元素在容器中的位置,可以根据序号取元素。

主要实现类:ArrayListLinkedList

Collection c = new ArrayList();// ArrayList()是实现collection接口的

Object get(int index);

Object set(int index, Object element);

void add(Object element);

void add(int index,Object element);

Object remove(int index);

int indexOf(Object o);

int lastIndexOf(Object o);

 

List list = new LinkedList(); LinkedList()是实现list接口的

List<String> list = new LinkedList<String>()//限定容器中只能放String

 

 

Vector

List接口的实现类。

特点:跟ArrayList一样,都是可变长的对象数组。

与ArrayList区别

Vector是线程安全的,是可以同步的,运行效率低;

ArrayList不同步,适合于单线程环境中。

public Object elementAt(int index)

public void addElement(Object obj)

public void removeElementAt(int index)

public void insertElementAt(E obj, int index)

public boolean removeElement(Object obj)

public void removeAllElements()

 

Stack(栈)

extends Vector

特点:LIFO(后进先出)的对象堆栈

主要方法:

public Object push(E item)//增添

public Object pop()//删除

public Object peek()// peek()查看栈顶对象而不移除它

public boolean empty()//判断是否为空

public int search(Object o)//查找

 

 

2、Queue(队列)

 

先进先出

offer():add()(入队)如果可能,将指定的元素插入此队列。

peek(),element():在不移除的情况下返回队头。peek方法在队列为空时返回null,element方法在队列为空时抛出异常。

poll(),remove():移除并返回队头(出队)。poll方法在队列为空时返回null,remove方法在队头为空时抛出异常。

PriorityQueue类

Queue的比较标准的实现类—优先队列

不按元素加入队列的顺序,而是按照元素的大小进行排序

元素大小比较:需实现Comparable接口或者使用comparator

只能放入同一类元素

Deque接口

Queue的子接口—双向队列

实现类 ArrayDeque

主要方法:

addFirst/offerFirst/push 将元素插入双端队列开头

addLast/offerLast将元素插入双端队列尾端

getFirst/PeekFirst 获取但不删除双端队列的第一个元素

getLast/PeekLast获取但不删除双端队列的最后一个元素

removeFirst /pollFirst/pop  获取并删除双端队列的第一个元素

removeLast/pollLast 获取并删除双端队列的最后一个元素

LinkedList类

实现了Deque和List两个接口

可以是队列、栈、链表

3、Set接口

Collection接口的子接口,未提供额外的方法。

理解:实际上Set就是Collection,只是行为不同(继承与多态思想的典型应用:表现不同的行为)。

实现Set接口类的特点:元素无顺序,不重复。

JDK API中Set的实现类

HashSet、TreeSet、LinkedHashSet

 

 hashCode概述

哈希表的原理

Object类中的hashCode()

为何使用hashCode方法?

在元素数量大的情况下,大大提高检索的效率。

只有用到Hashtable、HashMap、HashSet、LinkedHashMap等时才要注意hashcode方法。

对hashCode方法的要求

如果一个类要实现hashCode,必须和equals方法一块实现。hashCode方法和equals方法返回值的关系满足:

equals()为true的两个对象,hashcode()返回值一定相等;

equals()不为true的两个对象,它们的hashCode()不一定相等。即,equals()不为true的两个对象,hashCode()有可能相等。(哈希码在生成的时候可能产生冲突)。

hashCode()不等的两个对象,equals()不为true ;hashCode()相等,equals()可能为true ,也可能不为true 。

 

二、Map (映射表)

一群成对的对象集,这些对象各自保持着“键-值”(key-value)对应关系。

 允许使用一个对象来查找另一个对象。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值