Java中的集合类Collection接口和Map接口以及列表和LinkedList类
5108 点击·0 回帖
![]() | ![]() | |
![]() | java中的集合类 java用集合类来容纳不同种类的数据,这种容纳是建立在未知的基础上,即java要用有限种类的集合类,来容纳无限种类的数据对象。 归纳起来java的集合类可以分为3类,即集、列表和映射。 1、集(Set) 集(Set):和数学上的“集合”概念相对应,是最简单的一种集合。 Set集合中不区分元素的顺序,因此也就不记录元素的加入顺序。 Set集合中不包含重复元素,即任意的两个元素e1和e2都有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.Set和java.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类 Stack是Vector类的子类,特点: “后进先出”(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)能很方便地完成元素的插入和删除工作 | |
![]() | ![]() |