集合复习

来源:互联网 发布:新业汽修软件 编辑:程序博客网 时间:2024/05/21 11:24

一、集合类与数据容器

1、集合与数组的特点:

集合只存储对象,是一个容器,用于存放对象,长度可变,要存储基本数据需先转换为对象

数组可存对象,也可是基本数据,长度不可变,是一个容器

2 Java用集合类来容纳不同种类的数据,这种容纳是建立在未知的基础上,即Java要用有限种类的集合类,来容纳无限种类的数据对象。

3分类:Java的集合类可以分为三类:集、列表和映射

1)集(Set):和数学上的集合概念相对应,是最简单的一种集合。

Set集合中不区分元素的顺序,因此也就不记录元素的加入顺序。

Set集合中不包含重复元素,即任意的两个元素e1e2都有e1.equals(e2)=false,并且最多有一个null元素。

(2)列表(List
List列表区分元素的顺序,即List列表能够精确的控制每个元素插入的位置,用户能够使用索引(元素在List中的位置)来访问List中的元素。List允许包含重复元素,可以通过角标操作。

(3)映射:保存的是-对信息,即Map中存储的每个元素都包括起标识作用的和该元素的两部分,查找数据时不需提供相应的,才能查找到该所映射的。因此,Map集合中不能包含重复的,并且每个最多只能映射一个值。

二、Collection接口

Java.util.Collection接口是最基本的集合接口,是根接口,方法不能实现,只能在子类中实现。定义了集合操作的普遍方法。

public booleanadd(E e) :向集合添加一个元素,成功返回true,否则返回false,子接口中此方法发生了变化,set接口中添加重复元素时会被拒绝并返回false,而list接口则会接受重复元素并返回true

public boolean addAll(Collection<?extends E> c):将指定集合中的所有元素都添加到此集合中

public voidclear():移除此集合中的所有元素(可选操作)。

public booleancontains(Object o):如果此集合包含指定的元素,则返回 true

public booleancontainsAll(Collection<?> c):如果此集合包含指定集合中的所有元素,则返回 true

public booleanequals(Object o):比较此集合与指定对象是否相等。

public inthashCode() :返回此集合的哈希码值。

public booleanisEmpty() :如果此集合不包含元素,则返回 true

publicIterator<E> iterator():返回在此集合的元素上进行迭代的迭代器。

public booleanremove(Object o):从此集合中移除指定元素的单个实例,如果存在的话

public booleanremoveAll(Collection<?> c):移除此集合中那些也包含在指定集合中的所有元素

public booleanretainAll(Collection<?> c):仅保留此集合中那些也包含在指定集合的元素

public intsize() :返回此集合中的元素个数。

public Object[]toArray() :返回集合中所有元素的数组。

需注意:

Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection子接口

Collection接口有多个子接口,其中最重要的两个java.util.Setjava.util.List分别描述集Set和列表List

三、列表

     java.util.List接口描述的是列表结构,允许程序员对列表元素的插入位置进行精确控制,并增加了根据元素索引来访问元素、搜索元素等功能。在继承父接口Collection的基础之上,List接口新增的相应方法:

void add(intindex, E element) 在列表的指定位置插入指定元素 

boolean add(E e)在列表的指定位置插入指定元素

E remove(intindex) 删除指定索引号元素

booleanremove(Object o) 删除第一个指定内容的元素

E get(int index)返回列表中指定位置的元素

int size()  返回列表中的元素数

intindexOf(Object obj)  如找到指定元素,返回索引值,否则返回1

List<E>subList(int fromIndex, int toIndex) 返回列表中指定的fromIndex(包括)和toIndex(不包括)之间的部分视图。

void clear()从列表中移除所有元素

Java.util.List接口的实现类有多个,分别体现了列表的不同分化形式。

ArrayList

Vector

Stack

LinkedList

四、Vector类:(底层数据结为数组,存储,查找慢)

构造方法:

Vector():构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零。

Vector(Collection<? extends E> c):构造一个包含指定 collection中的元素的向量,这些元素按其 collection的迭代器返回元素的顺序排列。

Vector(int initialCapacity)  :使用指定的初始容量和等于零的容量增量构造一个空向量。

Vector(int initialCapacity, intcapacityIncrement):使用指定的初始容量和容量增量构造一个空的向量。

方法:

void addElement(E obj)  :向Vector中添加元素

void insertElementAt(E obj, int index):在指定索引处添加元素

void setElementAt(E obj, int index)   :替换指定所引出元素

boolean removeElement(Object obj) :删除指定队象元素

 voidremoveElementAt(int index)  :删除指定索引的元素

void removeAllElements()  :删除所有元素  E elementAt(int index)

int size()  :获取当前Vector的长度。

五、先进后出的Stack类(堆栈)

StackVector类的子类特点:后进先出Last In First Out)类型的容器,即最后一个被压(push进堆栈中的对象,会被第一个弹(pop出来。

只可以从堆栈的顶端,执行从堆栈里弹出元素和压入元素的动作

构造方法

Stack() :用于创建支持后进先出访问方式的对象

方法

E peek() 返回栈顶元素,但没有弹出栈顶元素

E pop() 弹出栈顶元素,并返回其中的对象。

E push(E item) 向堆栈顶端压入item对象,同时将item对象返回。

boolean empty() 判断堆栈是否为空,如果该堆栈为空,返回true,反之返回false

Pushpop是两个重要方法,反映了堆栈后进先出的重要特性

六、LinkedList

构造方法:

LinkedList() :构造一个空列表。

LinkedList(Collection<? extends E> c):构造一个包含指定 collection中的元素的列表,这些元素按其 collection的迭代器返回的顺序排列。

方法:

void addFirst(E e)  :将指定元素插入此列表的开头。

void addLast(E e)  :将指定元素添加到此列表的结尾。

E getFirst() :返回此列表的第一个元素。

E getLast() :返回此列表的最后一个元素。

E removeFirst() :移除并返回此列表的第一个元素。

E removeLast() :移除并返回此列表的最后一个元素。

boolean offerFirst(E e) :在此列表的开头插入指定的元素。

boolean offerLast(E e) :在此列表末尾插入指定的元素。

E peekFirst() :获取但不移除此列表的第一个元素;如果此列表为空,则返回 null

E peekLast()  :获取但不移除此列表的最后一个元素;如果此列表为空,则返回 null

E pollFirst() :获取并移除此列表的第一个元素;如果此列表为空,则返回 null

E pollLast() :获取并移除此列表的最后一个元素;如果此列表为空,则返回 null

七、ArrayList类:

构造方法:

ArrayList()  :构造一个初始容量为 10的空列表。

ArrayList(Collection<? extends E> c)  :构造一个包含指定 collection的元素的列表,这些元素是按照该 collection的迭代器返回它们的顺序排列的。

ArrayList(int initialCapacity)  :构造一个具有指定初始容量的空列表。

方法:

boolean add(E e) :将指定的元素添加到此列表的尾部。

 void add(int index, E element)  :将指定的元素插入此列表中的指定位置。

 booleanaddAll(Collection<? extends E> c)    按照指定 collection的迭代器所返回的元素顺序,将该 collection中的所有元素添加到此列表的尾部。

 boolean addAll(int index, Collection<?extends E> c)   :从指定的位置开始,将指定 collection中的所有元素插入到此列表中。

 voidclear()  :移除此列表中的所有元素。

 Object clone()  :返回此 ArrayList实例的浅表副本。

 boolean contains(Object o)  :如果此列表中包含指定的元素,则返回 true

 voidensureCapacity(int minCapacity)   :如有必要,增加此 ArrayList实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。

 Eget(int index)   :返回此列表中指定位置上的元素。

 intindexOf(Object o)  :返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1

 boolean isEmpty()  :如果此列表中没有元素,则返回 true

 intlastIndexOf(Object o)  :返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1

 Eremove(int index)   :移除此列表中指定位置上的元素。

 boolean remove(Object o)  :移除此列表中首次出现的指定元素(如果存在)。

protected void removeRange(int fromIndex, int toIndex)  :移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之间的所有元素。

 Eset(int index, E element)  :用指定的元素替代此列表中指定位置上的元素。

 intsize()  :返回此列表中的元素数。

 Object[] toArray()  :按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组。

<T> T[]toArray(T[] a)  :按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。

 voidtrimToSize()  :将此 ArrayList实例的容量调整为列表的当前大小。

 

实现了Set接口的类HashSet

基于散列表的检测重复元素的策略:HashSet里的元素值同这个元素在Set里所存放的索引位置有个对应关系(散列函数),在HashSet里插入元素前,可根据这个元素值和对应关系,计算出这个元素在HashSet里的插入位置,如果在这个位置里(或位置周围)已经存在了待插入元素的值,则不能插入。 

构造方法

HashSet()

HashSet(<E>c)

其他方法

booleancontains(Object o)判断是否存在指定元素

 HashSet类的综合应用。

Set<String> set = newHashSet<String>();      

set.add("One");         set.add("One");

System.out.println(set.size());     //输出元素个数为:1     

set.add(Two);   System.out.println(set.size());   //元素个数:2       

System.out.println(set.contains(“One”));     //true,包含元素“One”

第一类集合有着共同的特性:它们存储的对象都是一元的(线性的),只不过存储的方式和使用的数据结构不同,Collection为基类--封装了线性表的插入、删除等基本操作。

List接口和Set接口都是Collection的子接口                          

     实现List接口:基于线性链表来存放数据的,例如Vector                        

     实现Set接口:它们不允许有重复的元素,例如HashSet

日常生活中,经常需要把复杂对象用索引形式管理的情况。

Java中,专门建立以Hashtable为代表的-对类型对象”--索引信息,而” –同索引值相对应的信息

为什么要使用-对型的数据结构

原因:便于信息检索,提高在大数据量里检索信息的速度。

工作原理

(1)如果要从其中查询指定数据的话,不得不依次遍历这个数组,这样效率会很低

2)换一种思路:将10存入数组不是插入在第一个空闲空间里!