接上篇:java集合类学习(二)

  1. 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)相关推荐

  1. java 集合类 map/set/list/vector之间的关系

    线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文试图通过简单的描述,向读者阐述各个类的作用以 ...

  2. Java 集合框架(List、Set、Map、Iterator、Stack、Properties)

    文章目录 1. ArrayList 2. LinkedList 3. HashSet 4. TreeSet 5. Iterator.ListIterator 6. HashMap 7. TreeMap ...

  3. java基础(三) 加强型for循环与Iterator

    戳上面的蓝字关注我们哦! 精彩内容 精选java等全套视频教程 精选java电子图书 大数据视频教程精选 java项目练习精选 引言   从JDK1.5起,增加了加强型的for循环语法,也被称为 &q ...

  4. java集合类详解_【Java入门提高篇】Day20 Java集合类详解(三)List接口

    今天要说的是Collection族长下的三名大将之一,List,Set,Queue中的List,它们都继承自Collection接口,所以Collection接口的所有操作,它们自然也是有的. Lis ...

  5. Java集合类: Set、List、Map、Queue区别及应用

    Java集合类基本概念 在编程中,常常需要集中存放多个数据.从传统意义上讲,数组是我们的一个很好的选择,前提是我们事先已经明确知道我们将要保存的对象的数量.一旦在数组初始化时指定了这个数组长度,这个数 ...

  6. Java 集合类图(转)

    1.java集合类图 1.1 1.2 上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,Ab ...

  7. Java集合排序及java集合类详解

    Java集合排序及java集合类详解 (Collection, List, Set, Map) 摘要内容 集合是Java里面最常用的,也是最重要的一部分.能够用好集合和理解好集合对于做Java程序的开 ...

  8. java集合类继承关系图_java集合继承关系图

    面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的,数组中可以存储基 ...

  9. 面试江湖:一招破解 Java 集合类面试题

    点击上方"程序员江湖",选择"置顶或者星标" 你关注的就是我关心的! 今日招式:Java集合类面试题 Java集合类绝对是我们的老朋友了,Java技术江湖里,谁 ...

  10. 集合之Collection家族的 List接口+LinkedList+Vector+Stack及Set接口+HashSet+LinkedHashSet+TreeSet

    集合之Collection家族的 List接口+LinkedList+Vector+Stack及Set接口+HashSet+LinkedHashSet+TreeSet 一.LinkedList 1.L ...

最新文章

  1. Anconda PyCharm TensorFlow
  2. (未完)httpd进程数查询,prefork模式修改apache最大连接数
  3. 笔记-项目范围管理-指导与管理项目工作-控制质量-确认范围-结束项目或阶段...
  4. 1350B. Orac and Models
  5. 产品经理与产品运营哪个更有前途/钱途?
  6. 程序员都该知道这5个定律,有朋友使用后,现在已经是软件工程师!
  7. 随想录(串口屏带来的启示)
  8. BZOJ.1178.[APIO2009]会议中心(贪心 倍增)
  9. 项目Alpha冲刺(6/10)
  10. ElasticSearch 全文检索实战
  11. Python学习:IndentationError: expected an indented block
  12. Type-C引脚、24Pin Type-C、16Pin Type-C、12Pin Type-C、6Pin Type-C
  13. android root写入文件,android中root用户无法往某些目录写入文件解决方法
  14. 水果电商网站开发过程
  15. 【elasticsearch报错】 blocked by: [SERVICE_UNAVAILABLE/1/state not recovered / initialized];
  16. 【转】中专生的C++之路!
  17. macOS app动态修改app图标,图标为icns格式
  18. 如何快速编写纯CSS菜单?制作CSS精美菜单优化精简代码详细教程
  19. STM32CubeMAX 安装 2020年3月26日
  20. 删除插件mysearchresult(chrome和firebox)

热门文章

  1. unity 贴图设置
  2. Atitit 浏览器tech原理与概论 目录 1. 浏览器概述 1 1.1. 浏览器野史 UserAgent列传 1 1.2. 浏览器趋势 1 1.3. 浏览器大战 1 1.4. 三次浏览器大战 2
  3. paip.模块化与面向对象的关系以及实现
  4. (转)Rust:Ownership,Reference和Lifetime详解
  5. (转)2017中国互联网证券年度报告
  6. CTP: 找ActionDay 和TradingDay说点事
  7. 性能提升160%,为全球提供顶级算力:阿里云发布第三代神龙云服务器
  8. Kafka从上手到实践 - 实践真知:搭建Zookeeper集群 | 凌云时刻
  9. 云智能,助力警务大数据云平台建设
  10. 致敬SpaceX,奥思数据对象存储航天品质服务航天项目