java集合类(三)About Iterator Vector(Stack)
接上篇:java集合类学习(二)
- Talk about “Iterator”:
任何容器类,在插入元素后,还需要取回元素,因为这是容器的最基本工作。对于一般的容器,插入有add()相关方法(List,Set),put()相关方法(Map),取出元素也都有get()相关方法,但这有个缺点,就是使用容器必须对容器的确切类型编程,这导致代码重用性差,因为我们在获取元素时并不关心容器的类型,因此,为解决这个情况,迭代器应运而生。
所谓迭代器,也是一个对象,它的作用是遍历并选择序列中的对象,而程序员不需要知道该序列的底层结构。迭代器统一了容器的访问方式,并且被称为“轻量级对象”,因为创建它的代价很小。 下面举例说明:
public void iteratordemo(){ArrayList<String> a = new ArrayList<String>(Arrays.asList("dog","cat","pig","fish"));Iterator<String> i = a.iterator();while(i.hasNext()){System.out.print(i.next()+" ");}System.out.println("");//foreachfor(String s:a){System.out.print(s+" ");}
}
ArrayList<String> a = new ArrayList<String>(Arrays.asList("a","b","c"));
LinkedList<Integer> l = new LinkedList<Integer>(Arrays.asList(1,2,3));
HashSet<Double> s = new HashSet<Double>();
public void iteratordisplay(Iterator<String> s){while(s.hasNext()){System.out.print(s.next()+" ");}System.out.println();
}
iteratordisplay(a.iterator());
iteratordisplay(l.iterator());
iteratordisplay(s.iterator());
另外,Iterator有个比它强大的子类型ListIterator,但ListIterator只能用于各List类的访问,而且Iterator只能通过hasNext()向前移动,ListIterator还能通过HasPrevious()向后移动,并且可以用set()替换元素,还可通过ListIterator(n)创建一个一开始就指向列表索引为n的元素的ListIterator,具体操作与Iterator类似
2. About Vector: ( 拿较常用的Stack做详细说明)
All Implemented Interfaces:Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess extends AbstractList<E>
- Direct Known Subclasses: Stack
//Constructor methods
Vector<String> v = new Vector<String>();
Vector<String> v1 = new Vector<String>(Arrays.asList("q","w"));
Vector<Integer> v2 = new Vector<Integer>(9);
//Vector(initialcapacity,capacityincrement)
Vector<Double> v3 = new Vector<Double>(5,5);//new methods
v.addElement("a");
int i = v.capacity();Object[] s = new String[100];
v.copyInto(s);
v.elementAt(1);
v.insertElementAt("b",2);
v.removeElement("a");
v.removeElementAt(2);
v.removeRange(2,4);
v.setElementAt("c",3);
3.About Stack:
- 论java中,堆与栈的区别:
1)生长方向不同:堆从低地址到高地址存储,而栈则相反
2)作用不同:
a.堆主要用来存new创建的对象和数组,还有static变量,空间由JVM的GC自动回收
b.栈主要用来存方法中局部变量以及对象或数组的引用(提高访问速率)
- Stack的实现:
在java集合类(二)中介绍LinkedList是提到它有pop(),push(),peek()等方法,这些方法已足够实现一个Stack的基本功能,《Thinking in Java》中的代码如下:
package net.mindview.util;import java.util.LinkedList;public class Stack<T>{private LinkedList<T> storage = new LinkedList<T>();public void push(T v){storage.addFirst(v); }public T peek(){return storage.getFirst();}public T pop(){return storage.removeFirst();}public boolean empty(){return storage.isEmpty();}public String toString(){return storage.toString();}
}
方法说明:push()进行元素入栈,peek()元素出栈,但不移除,pop()元素出栈,移除。使用上面自己实现的栈:
//import package mentioned aboveimport net.mindview.util.Stack;public class Stacktest{public static void main(String[] args){Stack<String> stack = new Stack<String>();for(String s: "I love you".split(" "))stack.push(s);while(!stack.empty())System.out.println(stack.pop() + " ");}//output: you love I
}
至于在java.util.*中的Stack,可能由于起初在java1.0时创建的没考虑全面,虽然也可以实现Stack的功能,但上面用LinkedList实现的Stack相对更好。另外,为防止与java.util.*中的Stack发生命名冲突,通常在导入java.util.*时,类名不能为Stack。最后,当想要同时使用这两种Stack时,我们可以通过全限定名称解决冲突,如定义java.util包中的Stack时,可以“java.util.Stack<String> s = new java.util.Stack<String>();”,其他同理。
PS:现在一般选用LinkedList实现的Stack!
下一节学习“java集合类(四)About Set”
### 学习从来都是一个过程,对对错错对对...若文中有错误,还望读者批评指出 ###
转载于:https://www.cnblogs.com/allenpengyu/p/3462928.html
java集合类(三)About Iterator Vector(Stack)相关推荐
- java 集合类 map/set/list/vector之间的关系
线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文试图通过简单的描述,向读者阐述各个类的作用以 ...
- Java 集合框架(List、Set、Map、Iterator、Stack、Properties)
文章目录 1. ArrayList 2. LinkedList 3. HashSet 4. TreeSet 5. Iterator.ListIterator 6. HashMap 7. TreeMap ...
- java基础(三) 加强型for循环与Iterator
戳上面的蓝字关注我们哦! 精彩内容 精选java等全套视频教程 精选java电子图书 大数据视频教程精选 java项目练习精选 引言 从JDK1.5起,增加了加强型的for循环语法,也被称为 &q ...
- java集合类详解_【Java入门提高篇】Day20 Java集合类详解(三)List接口
今天要说的是Collection族长下的三名大将之一,List,Set,Queue中的List,它们都继承自Collection接口,所以Collection接口的所有操作,它们自然也是有的. Lis ...
- Java集合类: Set、List、Map、Queue区别及应用
Java集合类基本概念 在编程中,常常需要集中存放多个数据.从传统意义上讲,数组是我们的一个很好的选择,前提是我们事先已经明确知道我们将要保存的对象的数量.一旦在数组初始化时指定了这个数组长度,这个数 ...
- Java 集合类图(转)
1.java集合类图 1.1 1.2 上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,Ab ...
- Java集合排序及java集合类详解
Java集合排序及java集合类详解 (Collection, List, Set, Map) 摘要内容 集合是Java里面最常用的,也是最重要的一部分.能够用好集合和理解好集合对于做Java程序的开 ...
- java集合类继承关系图_java集合继承关系图
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的,数组中可以存储基 ...
- 面试江湖:一招破解 Java 集合类面试题
点击上方"程序员江湖",选择"置顶或者星标" 你关注的就是我关心的! 今日招式:Java集合类面试题 Java集合类绝对是我们的老朋友了,Java技术江湖里,谁 ...
- 集合之Collection家族的 List接口+LinkedList+Vector+Stack及Set接口+HashSet+LinkedHashSet+TreeSet
集合之Collection家族的 List接口+LinkedList+Vector+Stack及Set接口+HashSet+LinkedHashSet+TreeSet 一.LinkedList 1.L ...
最新文章
- Anconda PyCharm TensorFlow
- (未完)httpd进程数查询,prefork模式修改apache最大连接数
- 笔记-项目范围管理-指导与管理项目工作-控制质量-确认范围-结束项目或阶段...
- 1350B. Orac and Models
- 产品经理与产品运营哪个更有前途/钱途?
- 程序员都该知道这5个定律,有朋友使用后,现在已经是软件工程师!
- 随想录(串口屏带来的启示)
- BZOJ.1178.[APIO2009]会议中心(贪心 倍增)
- 项目Alpha冲刺(6/10)
- ElasticSearch 全文检索实战
- Python学习:IndentationError: expected an indented block
- Type-C引脚、24Pin Type-C、16Pin Type-C、12Pin Type-C、6Pin Type-C
- android root写入文件,android中root用户无法往某些目录写入文件解决方法
- 水果电商网站开发过程
- 【elasticsearch报错】 blocked by: [SERVICE_UNAVAILABLE/1/state not recovered / initialized];
- 【转】中专生的C++之路!
- macOS app动态修改app图标,图标为icns格式
- 如何快速编写纯CSS菜单?制作CSS精美菜单优化精简代码详细教程
- STM32CubeMAX 安装 2020年3月26日
- 删除插件mysearchresult(chrome和firebox)
热门文章
- unity 贴图设置
- Atitit 浏览器tech原理与概论 目录 1. 浏览器概述	1 1.1. 浏览器野史 UserAgent列传	1 1.2. 浏览器趋势	1 1.3. 浏览器大战	1 1.4. 三次浏览器大战	2
- paip.模块化与面向对象的关系以及实现
- (转)Rust:Ownership,Reference和Lifetime详解
- (转)2017中国互联网证券年度报告
- CTP: 找ActionDay 和TradingDay说点事
- 性能提升160%,为全球提供顶级算力:阿里云发布第三代神龙云服务器
- Kafka从上手到实践 - 实践真知:搭建Zookeeper集群 | 凌云时刻
- 云智能,助力警务大数据云平台建设
- 致敬SpaceX,奥思数据对象存储航天品质服务航天项目