zoukankan      html  css  js  c++  java
  • [Java2 入门经典]第14章 集合框架

    前言:

    Vector<T> 保存的是对象的引用,所有序列的集合都实现了Iterable<>接口,可以从集合中获取迭代器对象。

    Vector<String> names = new Vector<String>();

    java.util.Iterator<String> iter = names.iterator();

    ==============================================================================

    集合框架由多种代表集合类的泛型构成。这些泛型定义在java.util包中。

    为构造和管理程序中的对象集合提供了多种方式,尤其是在无法预先确定需要存储的对象的数目时,或者需要比数组提供的索引机制更灵活的集合对象访问方式时。

    本章:

    Q:什么是集、队列、映射,及其工作机理。

    A:集里的对象根本不按任何特定的方式排列。集中不能有重复的对象。

    序列中的对象以线性方式存储,不需要特殊的顺序,但有开头和结尾。因为是线性的,只能在序列开头或尾部添加新对象,或者在序列中指定对象的位置后面插入新对象。序列具有在序列的不同位置保存同一对象的多份副本的能力。

    集:HashSet<T> LinkedHashSet<T> TreeSet<T> EnumSet<T extends Enum<T>>

    列表:Vector<T> Stack<T> LinkedList<T> ArrayList<T>

    队列:PriorityQueue<T>

    映射:Hashtable<K,V> HashMap<K,V> LinkedHashMap<K,V> WeakHashMap<K,V> IdentityHashMap<K,V> TreeMap<K,V>

    Q:集合对象Vector<T>是什么,以及如何在程序中使用Vector<T>对象。

    A:Vector<T> 定义了元素类型为T的序列集合。

    Q:如何管理Vector<T>对象才能保证元素的存储和获取是类型安全的。

    Q:集合Stack<T>是什么,以及如何使用。

    Q:如何使用集合LinkedList<T>

    Q:如何在以HashMap<K,V>对象表示的散列表中存储和获取对象。

    Q:如何为自己的类的对象生成散列码(hashcode)。

    14.1

    Java的集合框架是一套用来创建集合类的泛型

    14.2 对象的集合

    在不同的组织方式中,主要有三种类型的集合,称作集(set),序列(sequence)和映射(map)。

    集合只存储引用-至于对象本身,均位于集合外部。

    14.3 迭代器

    Iterator<>

    列表迭代器

    ListIterator<>

    14.4 集合类

    集 HashSet<T> LinkedHashSet<T> TreeSet<T> EnumSet<T extends Enum<T>>

    列表 Vector<T> Stack<T> LinkedList<T> ArrayList<T>

    队列 PriorityQueue<T>

    映射 Hashtable<K,V> HashMap<K,V> LinkedHashMap<K,V> WeekHashMap<K,V> IdentityHashMap<K,V> TreeMap<K,V>

    集,列表,队列的基类是AbstractCollection<> 提供的操作有:向集合中添加对象、从集合中删除对象、为集合提供迭代器,以及测试集合中是否还存有对象。

    映射基类是AbstractMap<>

    集合接口

    。。。

    14.5 使用向量

    14.5.1 创建向量

    Vector<String> transactions = new Vector<String>();//默认容量为10

    Vector<String> transactions = new Vector<String>(100);//每次超过容量时,它的容量会加倍。

    Vector<String> transactions = new Vector<String>(100,10); //每次超过容量时,增加10

    向量的容量(capacity)和长度(size)

    长度是指实际存储的对象的数量,每次加入对象时长度都会增加

    容量是指能够存储的对象的最大数量。(容量会在对象数量超过当前容量时,自动按约定增加,如上面14.5.1)

    (1)获取和确保容量大小

    capacity()

    ensureCapcity(150)

    (2)改变长度

    setSize(50)

    如果每次超过当前容量时容量都加倍,那么将造成内存浪费,trimToSize() 改变容量以匹配当前的长度。

    14.5.2 把对象存入向量中

    add()

    add(index,object) 索引值必须小于等于向量的长度,就是说这个位置已经存有对象的引用,或者位于向量的尾部。索引值从零开始。原先索引值大于或等于index的元素向后移动。

    set(index, object)这是改变index对应的引用。通过返回值可以获得那个已经替换掉的对象。

    addAll(myNamesList) 可以把另一集合中的所有对象添加到向量中 LinkedList<> myNamesList

    addAll(i, myNamesList) 指定插入的位置。

    14.5.3 从向量中获取对象

    get(index)

    firstElement() 获取第一个元素

    lastElement() 获取最后一个元素

    1、利用列表迭代器访问向量中的元素

    ListIterator<String> listIter = names.listIterator();

    ListIterator<String> listIter = names.listIterator(2); 该迭代器封装了names中从索引值为2的元素开始到最后一个的元素。

    List<String> list = names.subList(2,5);  第一个参数是索引位置,第一个是上限元素位置,不包括在列表中,取的是2号到4号元素。

    ListIterator<String> listIter = names.subList(5,15).listIterator(2); 此迭代器访问7号到14号的元素。

    2、提取向量中的所有元素

    有时希望能够将Vector>对象包含的元素作为普通数据取出来

    String[] data = names.toArray(new String[names.size()]);   //集合 -> 数组

    String[] people = {"Brian","Beryl","Belinda", "Barry","Bill","Barbara"}

    List<String> nameList = java.util.Arrays.asList(people);  //数组 -> 集合

    Vector<String> names = new Vector<String>(java.util.Arrays.asList(people));

    14.5.4 从数组中删除对象

    boolean remove(index)

    boolean remove(object)

    void removeElementAt()

    removeAll

    names.removeAll(names.subList(5,15));删除5号到14号索引元素。

    retainAll

    names.retainAll(names.subList(5,15)); 保留索引值5到14的元素,其余将被删除。

    names.removeAllElements() 丢弃所有元素。

    isEmpty()确定向量中是否仍含用元素

    14.5.5 搜索向量

    indexOf(object)

    indexOf(object, position) 第二个实参是定义起始搜索位置的索引值。这个方法主要用于向量中有一个对象的多次引用的情况

    14.5.6 应用向量

    示例后续再看。

    14.5.7 为集合排序

  • 相关阅读:
    c#对XML读取
    WPF--TypeConverter使用
    WPF---对于没有Command属性的添加以下代码可以达到有Command效果
    自定义事件、属性、方法
    读取Excel文件
    ClickOnce安装部署,手动。
    Logger 日志记录
    Maven
    等待与通知范式
    线程状态及基本方法
  • 原文地址:https://www.cnblogs.com/jimwind/p/2954514.html
Copyright © 2011-2022 走看看