Java中的集合类Collection接口和Map接口以及列表和LinkedList类

来源:互联网 发布:edu是顶级域名? 编辑:程序博客网 时间:2024/05/01 02:23

Java中的集合类

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

归纳起来Java的集合类可以分为3类,即集、列表和映射。

1、集(Set

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

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

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

2、列表(List

列表(List
List列表区分元素的顺序,即List列表能够精确的控制每个元素插入的位置,用户能够使用索引(元素在List中的位置)来访问List中的元素。和Set集合的不同,List允许包含重复元素。 

3、映射(Map

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

Collection接口和Map接口:

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

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

列表:

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

void add(int index, E element)     boolean add(E e)

E remove(int index)     boolean remove(Object o) 

E get(int index)

int size()

int indexOf(Object obj)

List<E> subList(int fromIndex, int toIndex)

void clear() 

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

ArrayList

Vector

Stack

LinkedList

先进后出的Stack

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

构造方法

Stack() :用于创建支持“后进先出”访问方式的对象
例:Stack st=new Stack();
       Stack <String> st = new Stack(); 

其他方法

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

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

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

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

10.4 Stack类的综合应用。 

Stack st = new Stack();  //Stack <String> st = new Stack(); 

st.push("First Element");

st.push("second Element");    ////死循环,因为peek()方法只返回栈顶元素而没有弹出

st.push("third Element");

while(st.empty() != true){

      System.out.println(st.pop().toString());

}

注意:由于Stack继承了Vector类,所以以下语句从语法上来讲,不会有问题。但却破坏了堆栈“后进先出”的特性,所以,不推荐使用。

st.addElement("bad usage1");

st.addElement("bad usage2");

st.addElement("bad usage3");

for(int i=0;i<st.size();i++){

      System.out.println(st.elementAt(i));

LinkedList类:链式存储方式

数组(逻辑上相邻的两个元素在物理上也是相邻的)

(1)可以根据数组起始地址和其中元素的索引号,很快地定位到数组中的任意元素

2)插入、删除元素等操作效率底

链式存储方式(逻辑上相邻的两个元素在物理上不相邻,通过“链条”连接)

(1)链表中元素访问的代价要比数组高。

2)能很方便地完成元素的插入和删除工作