泛型和容器(2)——List和迭代器

List
    有两种类型的List:
    (1)基本的 ArrayList,它长于随机访问元素,但是在List的中间插入和移除元素时较慢。
    (2) LinkedList,它通过代价较低的在List中间进行的插入和删除操作,提供了优化的顺序访问。LinkedList在随机访问方面相对比较慢,但是它的特性集较ArrayList更大。

    contains()方法确定某个对象是否在列表中
    remove()方法移除某个对象, removeAll()方法移除所有对象
    indexOf()方法发现该对象在List中所处位置的索引编号
    subList()方法从大的列表中创建一个片段
    toArray()方法将Collection转换为一个数组

迭代器
    迭代器是一个对象,它的工作是 遍历并选择序列中的对象。java的 Iterator只能 单向移动
    (1)使用方法iterator()要求容器返回一个 IteratorIterator将准备好返回序列的第一个元素。
    (2)使用 next()获得序列中的下一个元素。
    (3)使用 hasNext()检查序列中是否还有元素。
    (4)使用 remove()将迭代器新近返回的元素删除。

//iterator迭代器 public class SimpleIteration { public static void main(String[] args) { Collection<Integer> pets = new ArrayList(10); for (int i = 0; i < 10; i++) pets.add(i); Iterator<Integer> it = pets.iterator(); while (it.hasNext()) { Integer a = it.next(); System.out.print(a.intValue() + " "); } System.out.println(); it = pets.iterator(); for (int i = 0; i < 6; i++) { it.next(); it.remove(); } System.out.print(pets + " "); } }

运行结果:

0 1 2 3 4 5 6 7 8 9 [6, 7, 8, 9]


ListIterator
    ListIterator是一个更加强大的 Iterator的子类型。 ListIterator可以双向移动,还可以产生相对于迭代器在列表中指向的当前位置的前一个和后一个元素的索引,并且可以使用Set()方法替换它访问过的最后一个元素。

LinkedList
     LinkedList添加了可以使其用作栈、队列或双端队列的方法。

    getFirst()element()完全一样,都返回列表的头而不移除它,如果列表为空则抛出NoSuchElementException
    peek()稍有不同,列表为空时返回null
    remove()removeFirst()也完全一样, 都移除并返回列表的头 ,如果列表为空则抛出NoSuchElementException
    poll() 稍有不同,列表为空时返回null
    addFirst()将元素插入到列表头部,add()和addLast() 将元素插入到列表尾部
    removeLast()移除并返回列表的最后一个元素

    Queue接口在 LinkedList的基础上添加了element()offer()peek()poll()remove()方法

//List的特点 public class LinkedListFeatures { public static void main(String[] args) { LinkedList<Integer> pets = new LinkedList<Integer>(); for (int i = 0; i < 10; i++) pets.add(i); System.out.println(pets); System.out.println("pets.getFirst():" + pets.getFirst()); // 无返回值则抛出异常 System.out.println("pets.element():" + pets.element()); System.out.println("pets.peek():" + pets.peek()); // 无返回值则返回null System.out.println(pets); System.out.println("pets.remove():" + pets.remove()); System.out.println("pets.removeFirst():" + pets.removeFirst()); System.out.println("pets.poll():" + pets.poll()); // 无返回值则返回null System.out.println(pets); pets.addFirst(9); System.out.println("after addFirst(9):" + pets); pets.offer(34); System.out.println("after offer(34):" + pets); pets.add(67); System.out.println("after add(67):" + pets); pets.addLast(98); System.out.println("after addLast(98):" + pets); System.out.println("pets.removeLast():" + pets.removeLast()); } }

运行结果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] pets.getFirst():0 pets.element():0 pets.peek():0 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] pets.remove():0 pets.removeFirst():1 pets.poll():2 [3, 4, 5, 6, 7, 8, 9] after addFirst(9):[9, 3, 4, 5, 6, 7, 8, 9] after offer(34):[9, 3, 4, 5, 6, 7, 8, 9, 34] after add(67):[9, 3, 4, 5, 6, 7, 8, 9, 34, 67] after addLast(98):[9, 3, 4, 5, 6, 7, 8, 9, 34, 67, 98] pets.removeLast():98



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值