Java笔记十.集合类(一)

集合类(一)

所谓集合类,即为Java中的一种高级数据结构。在Java编程中,常用的集合类和接口有:Vector、Emumeration、ArrayList、Collection、Iterator、Set、List等。

一、Vector类与Emumeration接口

1.概述:

(1)Vector类:是Java语言提供的一种高级数据结构,可用于保存一系列对象,Vector适用于多线程使用可同步,安全系数较高。因此,Java不支持动态数组,Vector类提供了一种与"动态数组"相近的功能。适用:如果我们不能预先确保要保存对象的数目,或是需要方便获得某个对象的存放位置。

(2)Emumeration接口类:它提供了一种访问各种数据结构(Vector类只是众多数据结构中的一种)中的所有数据的抽象机制,就是我们访问各种数据结构对象中所有元素时,都可以使用同样的方式,调用同样的方法。如我们通过Vector.elements方法返回一个Emumeration接口对象(这个对象保存了Vector集合中所有元素),再用Emueration.nextElement方法逐一取出保存在集合中的每个对象。

2.类与接口剖析

Vector<E>--------javjava.lang.Object->a.util.Vector<E>,E为泛型。

(1)构造函数

Vector():构造一个Vector对象,其内部数据数组大小为10及其标准容量增量为零。
Vector(Collection<?
extends E> c):构造一个Vector对象,该对象的内容为Collection包含的所有元素,用于使用迭代器
it
   erator访问其所有的元素
Vector(int initialCapacity):构造一个Vector对象,其内部数据数组大小为capacity及其标准容量增量为零。
Vector(int initialCapacity,
int capacityIncrement):构造一个Vector对象,其内部数据数组大小为capacity及其标准容量增量为increment。

(2)常用方法

boolean
add(E e):在Vextor集合末尾添加一个元素(非对象)

void
addElement(E obj):添加一个对象元素到vector集合中

boolean contains(Object
o):(返回)查看集合中是否存在指定的对象元素

Enumeration<E>
elements():返回vector集合中所有的对象元素,并由其组成一个枚举对象

E
get(int index):获取指定位置的对象元素

int
hashCode():返回该Vector类的hash code值

Iterator<E>
iterator():以正确的序列返回这个列表中所有元素的迭代器

int
indexOf(Object o):返回从第一个元素开始第一次出现指定的对象元素,如果这个vector没有

int
size():计算vector集合拥有对象元素的个数

Object[]
toArray():将vector集合中所有元素存储在一个数组中

String
toString() :返回一个字符串表示的Vector类,每个元素包含的字符串表示

Enumeration<E>接口

boolean hasMoreElements():判定enumeration中是否还有元素
E nextElement():返回enumeration对象中保存的一个元素(当前)

注意:nextElement不是返回下一个对象,而是返回同指示器正指向的那个对象,并将指示器指向下一个对象。当指示器指向了一个空对象时,Enumeration.hasMoreElement方法将返回false,否则返回true,调用nextElement方法之前,指示器指向第一个对象或空对象。nextElement方法返回的是Object类型。如果我们需要整型数据,则需要对其进行类型转换,转换成Integer。

3.应用开发举例

(1)如何获取vector集合中所有对象元素及相应的内容?

Vector v=new Vector();        //创建一个vector集合类对象

Enumeration e=v.elements();//调用Vector类的elements方法获取所有对象元素并返回到一个Enumeration对象

while(e.hasMoreElements())//遍历Enumeration对象中所有的对象元素

{

Integer intObj=(Integer)e.nextElement();

//获取Enumeration中的一个Object对象元素,并将其转换为Integer类型,指示器指向下一个对象。

System.out.println(intobj.intValue());//输出Intefer对象相应的值

}

(2)如何将一个数字序列存储到vector集合中?

Vector v=new Vector();        //创建一个vector集合类对象

b=System.in.read();              //从键盘获取一个字符

int num=b-‘0‘;                      //将字符由b的ASCII码转换为数字,其‘0‘的ASCII码为48

v.addElement(new Integer(num)); //将一个数字转换为整型对象,存储到vector数据结构中

(3)源代码实现:从键盘上获取一个数字序列并存储到Vector数据结构中,最后在屏幕上打印每位数字相加的结果

<span style="font-family:Times New Roman;">import java.io.IOException;
import java.util.Enumeration;
import java.util.Vector;
/*Vector集合类实现"动态数组"效果
 * 实现:从键盘输入一串数字序列并存储到一种数据结构中,从数据结构中取出数字并相加*/
public class TestVector {
 public static void main(String[] args)
 {
  int b=0;
  Vector v=new Vector();
  System.out.println("请输入数据:");
  while(true)
  {
  //1.从键盘读取一个字节
   try{
    b=System.in.read();
   }
   catch(IOException e)
   {
    System.out.println(e.getMessage());
   }
  //2.将字节转换为Integer对象,并存储到Vector结构体中
   if(b=='\r'||b=='\n')
   {
    break;	 //退出循环,即退出while
   }
   else
   {
    int num=b-'0';	 //由于键盘输入的为字符,1的ASCII码为。。。
    v.addElement(new Integer(num)); //将一个数字转换为整型对象,存储到vector数据结构中
   }
  }

  //3.使用Enumeration接口取出所有Vector集合类存储的对象
  int sum=0;
  Enumeration e=v.elements();	//a.从Vector取出所有对象元素
  while(e.hasMoreElements())	//b.判定是否到末尾,取出所有数字
  {
   Integer i=(Integer)e.nextElement();//获取一个数字元素对象,并将其转换为Integer包装类对象
   sum+=i.intValue();	 //读取Integer对象指定的数字
  }
  System.out.println(sum);//输出结果
 }
}</span>

二、ArrayList类与Iterator接口

Java2平台发布后,Java设计者又设计了一套综合的数据结构,这些数据结构类的基本接口是Collection,它的使用非常类似于Vector类,只是方法的名称不同。我们要取出保存在实现了Collection接口对象中的所有对象,也必须通过Collection.iterator方法返回一个Iterator接口对象,Iteger接口的功能与使用同Enumeration接口非常相似。

Collection<--类似-->Vector             Iterator<--类似-->Enumeration

1.概述:

(1)ArrayList类:由于不能直接用Collection接口类创建对象,而必须用实现了Collection接口的类来创建对象,而ArrayList类就是一个实现了Collection接口的类。AarrylList类是Java语言提供的一种高级数据结构,可用于保存一系列对象(存储空间可变),除了数据不能同步其他操作基本等同于Vector。(Vector适用于多线程使用可同步)如果需要同步,可以执行这步:

List list = Collections.synchronizedList(new ArrayList(...));

(2)Iterator接口:它提供了一种访问各种数据结构中的所有数据的抽象机制,就是我们访问各种数据结构对象中所有元素时,都可以使用同样的方式,调用同样的方法。功能类似于Enumeration

2.类与接口剖析

ArrayList<E>,继承于Collection<E>,
List<E>

(1)构造函数

ArrayList():构造一个空列表且容量为10的ArrayList对象

Constructs an empty list with an initial capacity of ten.

ArrayList(Collection<?
extends E> c):
Constructs
a list containing the elements of the specified collection, in the order they are returned by the collection‘s iterator.
ArrayList(int initialCapacity):Constructs
an empty list with the specified initial capacity.

(2)常用方法

boolean add(E
e):在Vextor集合末尾添加一个元素(非对象)

boolean contains(Object o):(返回)查看集合中是否存在指定的对象元素

Enumeration<E>
elements():返回vector集合中所有的对象元素,并由其组成一个枚举对象

E get(int
index):获取指定位置的对象元素

int hashCode():返回该Vector类的hash
code值

Iterator<E>
iterator():以正确的序列返回这个列表中所有元素的迭代器

int indexOf(Object
o):返回从第一个元素开始第一次出现指定的对象元素,如果这个vector没有

int size():计算list集合拥有对象元素的个数

Object[] toArray():将vector集合中所有元素存储在一个数组中

void sort(Comparator<? super E> c):对ArrayList集合中所有元素进行排序

Iterator<E>接口,E-这个迭代器返回的元素的类型

boolean hasNext()

Returns true if the iteration has more elements.

E next()

Returns the next element in the iteration.

default void remove()

Removes from the underlying collection the last element returned by this iterator (optional operation).

3.应用开发举例

(1)如何获取ArrayList集合中所有对象元素及相应的内容?

ArrayList list=new ArrayList();        //创建一个vector集合类对象

Iterator i=list.iterator();//调用ArrayList类的iterator方法获取所有对象元素并返回到一个Iterator对象

while(i.hasNext())//遍历Iterator对象中所有的对象元素

{

Integer intObj=(Integer)i.next();

//获取ArrayList中的一个Object对象元素,并将其转换为Integer类型,指示器指向下一个对象。

System.out.println(intobj.intValue());//输出Intefer对象相应的值

}

(2)如何将一个数字序列存储到ArrayList集合集合中?

Vector v=new Vector();        //创建一个vector集合类对象

b=System.in.read();              //从键盘获取一个字符

int num=b-‘0‘;                      //将字符由b的ASCII码转换为数字,其‘0‘的ASCII码为48

v.add(new Integer(num)); //将一个数字转换为整型对象,存储到vector数据结构中

(3)源代码实现

A.从键盘上获取一个数字序列并存储到Vector数据结构中,最后在屏幕上打印每位数字相加的结果

<span style="font-family:Times New Roman;"><span style="font-size:18px;">import java.io.IOException;
import java.util.*;
/*ArrayList集合类实现"动态数组"效果
 * 实现:从键盘输入一串数字序列并存储到一种数据结构中,从数据结构中取出数字并相加*/
public class TestArrayList {
 public static void main(String[] args)
 {
  int b=0;
  ArrayList list=new ArrayList();
  System.out.println("请输入数据:");
  while(true)
  {
  //1.从键盘读取一个字节
   try{
    b=System.in.read();
   }
   catch(IOException e)
   {
    System.out.println(e.getMessage());
   }
  //2.将字节转换为Integer对象,并存储到Vector结构体中
   if(b=='\r'||b=='\n')
   {
    break;	 //退出循环,即退出while
   }
   else
   {
      int num=b-'0';	 //由于键盘输入的为字符,1的ASCII码为。。。
      list.add(new Integer(num)); //将一个数字转换为整型对象,存储到vector数据结构中
   }
  }

  //3.使用Enumeration接口取出所有Vector集合类存储的对象
  int sum=0;
  Iterator i=list.iterator();	//a.从Vector取出所有对象元素
  while(i.hasnext())	//b.判定是否到末尾,取出所有数字
  {
   Integer intObj=(Integer)e.next();//获取一个数字元素对象,并将其转换为Integer包装类对象
   sum+=intObj.intValue();	 //读取Integer对象指定的数字
  }
  System.out.println(sum);//输出结果
 }
}</span></span>

B.实现向List接口的ArrayList类对象中添加3个对象成员,然后用Collections类的sort静态方法对其进行排序

<span style="font-family:Times New Roman;"><span style="font-size:18px;">import java.util.*;
public class  TestSort
{
    public static void main(String[] args)
    {
        ArrayList list=new ArrayList();
        list.add(new Integer(1));
        list.add(new Integer(3));
        list.add(new Integer(2));
        System.out.println(list.toString());    //排序前
        Collections.sort(list);
        System.out.println(list.toString());    //排序后
    }
}</span></span>

总结:

1.Vector类中的所有方法都是线程同步的,两个线程并发访问Vector对象将是安全的,但只有一个线程访问Vector对象时,因为源程序仍调用了同步方法,需要额外的监视器检查,运行效率要低些。

2.ArrayList类中的所有方法都是非同步,所以在没有多线程安全问题时,最好用ArrayList,程序的效率会高些。

3.集合类接口的比较

(1)Collection------对象之间没有指定的顺序,允许重复元素;

(2)Set---------------对象之间有指定的顺序,不允许重复元素;

(3)List--------------对象之间有指定的顺序,允许重复元素。

Collection

|________>Set

|________>List

虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是在HashMap的基础上来实现的,这个就是Set和List的根本区别。List
用于遍历一个数组时效率最高;比如在循环显示所有信息时经常用到; Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象。

参考:http://docs.oracle.com/javase/8/docs/api/index.html

时间: 2024-10-12 05:51:40

Java笔记十.集合类(一)的相关文章

Java笔记十一.集合类(二)

集合类(二) 一.数组类与容器类 数组和其它容器的区别主要有三方面:效率,类型和保存基本类型的能力. 1.数组:是一种效率很高的存储和随机访问对象引用序列的方式.数组是一 个简单的线性序列,因此访问速度很快,但也损失了其它一些特性.创建一个数组对象后,大小就固定了,如果空间不够,通常是再创建一个数组,然后把旧数组中的所有引用移到新数组中.数组可可以保存基本类型,容器不行. 2.容器类:不以具体的类型来处理对象,而是将所有的对象都以Object类型来处理,所以我们可以只创建一个容器,任意的Java

Java笔记十四.深入理解类和对象(1)

Java是一种完全面向对象的编程语言(C是面向过程).所谓面向对象编程(OOP),即是一种编程风格,它通过给程序中加入扩展语句,把函数"封装"进编程所必需的"对象"中.OOP 达到了软件工程的三个主要目标:重用性.灵活性和扩展性.其实,面向对象就是把一切东西看成一个个对象,比如人,车,面包,等等,然后把这些对象拥有的属性变量,比如年龄,民族,工作地点,变质期,寿命,还有操作这些属性变量的函数(方法)打包成一个类来表示,这个类的一个抽象就是一个对象.在Java程序中,

Java笔记十九.深入解析I/O编程之流的层次结构

深入解析I/O编程之流的层次结构 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 大多数应用程序都需要与外部设备进行数据交换,最常见的外部设备包含磁盘和网络.所谓I/O(Input/Output缩写),即指应用程序对这些设备的数据输入与输出.在程序中,键盘被当作输入文件.显示器被当作输出文件使用.Java语言定义了许多专门负责各种方式的输入输出,这些类都被方法Java.io包中. 一.理解流的概念 1. 数据流 数据流是一串连续不断的数据的集

Java笔记十八.内部类和匿名类

内部类和匿名类 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.内部类 1.定义 在一个类内部定义类,即为嵌套类(内部类).有如下几点特点:(1)嵌套类可以直接访问嵌套它的类的成员(变量和方法),包括private成员.但是,嵌套类的成员却不能被嵌套它的类直接访问.(2)内部类使得程序代码更为紧凑,程序更具模块化. 2.内部类实现方法 (1)类中定义和使用一个内部类 在类中直接定义的嵌套类的使用范围,仅限于这个类的内部.内部类的定义和普通

Java笔记十二.常用API-Hashtable类及其与HashMap、HashSet的区别

常用API-Hashtable类及其与HashMap.HashSet的区别 一.Hashtable<K,V>类 1.概述 Hashtable是一种高级数据结构,实现了一个Key-Value映射的哈希表,用以快速检索数据.Hashtable不仅可以像Vector一样动态存储一系列的对象,而且对存储的每一个值对象(值)都安排与另一个键对象(关键字)相关联,非null对象都可以被使用作为键对象或者值对象.为了能够成功从hashtable中存储和读取对象元素,实现键对象的类必须实现hashCode方法

Java笔记十五.深入理解类和对象(2)

类是对某一类事务的描述,是抽象的.概念上的定义:对象是实际存在的该类事务的个体,因而也称实例.可见,类描述了对象的属性和对象的行为,一个类可以对应多个对象. 一.对象 1.new关键字 在Java编程中,我们通过使用new关键字和想要创建对象的类名来实例化一个类的对象.实例化对象作用,是为对象分配内存,由new操作符根据构造方法决定新建对象分配多大的内存来存储对象.new操作符需要一个参数,就是类的构造方法,构造方法是用于初始化对象的特别方法.new操作符为对象分配内存后将调用类的构造方法确定对

Java笔记十六.java中的this和super用法

一.this引用句柄 this引用句柄在Java程序里的作用,可表现为它在函数内部就是这个函数所属的对象的引用变量,即当前对象.在成员方法中,对访问的同类中成员前加不加this引用,效果都是一样的,这就好像同一公司的职员彼此在提及和自己公司有关的事时,不必说出公司名一样,当然为了强调,可以加上"咱们公司....."这样的前缀,而在Java程序中,this就相当于"我们所属于的那个对象". 每个成员方法内部,都有一个this引用变量,指向调用这个方法的对象.下面我们开

Java 第十二章 继承 笔记

Java 第十二章  继承 笔记 一.使用继承:     1)方便修改代码     2)减少代码量 二.super 继承object 类:super 访问父类的无参构造:super 指的是object 的无参构造.     例:子类调用父类:super.属性 / super.方法    注意:子类不能继承父类私有属性:得用set.get方法来调用:    super只能写在代码块的第一句:super只能调用非私有的方法:    super只能出现在子类的方法和构造方法中. 三.不能被继承的父类成

java jvm学习笔记十(策略和保护域)

欢迎转载请说明出处:http://blog.csdn.net/yfqnihao/article/details/8271415 前面一节,我们做了一个简单的实验,来说明什么是策略文件,在文章的最后,也顺带的讲了一下什么是策略,还有策略的作用. 为了引出另外一个很重要的概念ProtectionDomain(保护域),所以我们还是要先来回顾一下什么是策略.                         首先,什么是策略,今天的东西纯粹是比较概念的.当然,如果你读过笔记九,今天的东西,就真的是sos