Java笔记十.集合类(一)

集合类(一)

   所谓集合类,即为Java中的一种高级数据结构。在Java编程中,常用的集合类和接口有:Vector、Emumeration、ArrayList、Collection、Iterator、Set、List等。
转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空)
一、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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值