JAVA,是1995年由Sun MicroSystems公司推出的JAVA PDL和JAVA平台的总称。目前,JAVA已被广泛接受并使用.
集合框架是为表示和操作集合而提供的一种统一的标准体系结构.
任何集合框架,都包含三块内容:
.对外的接口
.具体实现类
.算法
一、为什么要需要集合框架?
<1>无法确定元素个数时,无法使用数组进行保存数据,该怎么办?
<2>如何存储对象,可通过ID获得对象信息。无法通过数组进行操作?
以上问题,均可用JAVA集合框架来解决.
JAVA集合框架为我们提供了一套性能优良,使用方便的接口和类。
位于JAVA.UNTIL包中.其包含众多的接口和类,处于对易用性和安全性的考虑,
本章只讲解比较重要的几个接口和类,这些已经足够应对我们日常编程的需要了.
二、List接口和ArrayList类
实现List接口的常用类有ArrayList和LinkedList.它们都可以容纳所有类型的对象,包括NULL,
并且都保证元素的存储顺序.
ArrayList类实现了可变大小的数组,它的优点就是随机访问元素和遍历元素时的效率比较高。
在A**课程中,只简单介绍了以下几种用法:
.Add(Object o) boolean 返回boolean类型变量
利用该方法,添加元素,若成功,返回TRUE,否则,FALSE
.Add(int index,Object o) 没有返回值,在集合中的指定位置添加元素
.Add(2,student) 在集合中的索引2位置上添加元素Student
注:此处的Index的取值范围是0-当前集合的所存元素数量.否则,将
发生异常 java.lang.IndexOutOfBoundsException
.Size() 返回集合元素的个数 INT
.get(int index) 通过索引进行元素访问
注:该方法返回的是一个OBJECT类型的元素,需要进行强制类型转换为
该元素原始类型
.Contains(Object o) 判断是否包含该元素 若包含返回TRUE,否则FALSE
.Contains(Collection c) 判读是否包含集合C中的全部元素,若包含则返回TRUE,否则False
.Remove(int index) 删除指定索引位置的元素,并返回该元素(Object)
.Remove(Object o) 通过对象名删除集合中的元素 返回boolean类型
若成功删除,则返回TRUE,否则FALSE
.addAll(Collection c) 将集合C中的全部元素添加到集合中 返回boolean
.addAll(int index,Collection c) 在指定索引位置开始依次添加C中的元素
好了,就简单介绍这几种用法,下面我们通过一段代码再详细了解一下:
首先我们创建一个Student类
- public class Student
- {
- //有参构造函数
- public Student(){]
- //无参构造函数
- //属性并封装
- private String name;
- private int age;
- private String hobby;
- public void setName(String name)
- {
- this.name = name;
- }
- public String getName()
- {
- return this.name;
- }
- public void setAge(int age)
- {
- if(this.age > 0 && this.age < 100)
- {
- this.age = age;
- }
- else
- {
- this.age = 20;
- }
- }
- public int getAge()
- {
- return this.age;
- }
- public void setHobby(String hobby)
- {
- this.hobby = hobby;
- }
- public String getHobby()
- {
- return this.hobby;
- }
- }
随后我们编写一个测试类TestStudent
- import java.util.List; //导入List接口所在包
- import java.util.ArrayList; //导入ArrayList类所在包
- public class TestStudent
- {
- public static void main(String args [])
- {
- //创建集合ArrayList
- List students = new ArrayList();
- //初始化Student类的对象
- Student rose = new Student("rose",24,"singing");
- Student jack = new Student("jack",27,"reading");
- Student mimi = new Student("mimi",28,"dancing");
- //利用Add()方法添加元素
- students.add(rose);
- //Add()方法返回BOOLEAN
- if(students.add(jack))
- {
- System.out.println("添加成功!");
- }
- //利用Add(int index,Object o)添加元素
- students.add(1,mimi);
- //利用Size()方法查看当前集合中的元素总数
- System.out.println("当前集合中所包含元素数量为:" + students.size());
- //读取单个元素,因为存入进该集合中的元素类型都会变为object类型,所以,读取出来后,需要进行强制类型转换.
- //读取单个元素需要用到get(int index)方法
- Student stu = (Student) students.get(1);
- System.out.println(stu.getName());
- //删除元素,有两种方式
- //<1>Remove(int index)
- students.remove(0);
- System.out.println("当前元素数量为:" + students.size());
- //<2>Remove(Object o)
- students.remove(jack);
- System.out.println("当前元素数量为:" + students.size());
- }
- }
关于List接口中的其他方法,大家可以试一试···
三、List接口和LinkedList类
LinkedList类是实现List接口的另一个常用的类
LinkedList提供了额外的addFirst(),addLast(),removeFirst(),removeLast(),getFirst(),getLast()
等方法.可以在LinkedList的首部或者中间尾部进行删除或者插入操作。这些方法使得LinkedList可以被用作栈(stack),队列(queue).
相对于ArrayList类,LinkedList在对集合中的元素继续删除后者插入操作时,具有更高的效率。所以,当我们需要频繁的对集合中的元素进行删除或者插入操作时,优先选择linkedList
.addFirst() 在列表的首部添加元素 void
.addLast() 在列表的尾部添加元素 void
.getFirst() 返回列表中的第一个元素 Object
.getLast() 返回列表中的最后一个元素 Object
.removeFirst() 删除列表中的第一个元素,并且返回该元素 Object
.removeLast() 删除列表中的最后一个元素,并且返回该元素 Object
我们同样利用上面的Student类,编写一个测试类,以体现LinkedList
- import java.util.LinkedList;
- public class TestStudent
- {
- public static void main(String args [])
- {
- //创建LinkedList对象
- LinkedList students = new LinkedList();
- //创建Student类的对象
- Student rose = new Student("rose",24,"singing");
- Student jack = new Student("jack",27,"dancing");
- Student mimi = new Student("mimi",28,"reading");
- students.add(rose);
- students.add(jack);
- students.add(mimi);
- //利用LinkedList扩展的getFirst(),getLast()获取单个元素
- //要进行强制类型转换
- Student stu = (Student)students.getFirst();
- System.out.println(stu.getName());
- //利用removeFirst()方法删除元素,该方法删除列表首部的元素,
- //并且返回该元素
- students.removeFirst();
- }
- }
以上,我们只是简单了介绍了LinkedList额外实现的一些简单方法.
三、Map接口和HashMap类
HashMap类是Map接口的实现类,实现一个键到值映射的哈希表。
一下是HashMap常用方法以及返回值
.Object put(Object key,Object value)
以键-值对的形式存储
注:键值必须是唯一的,如果存在两个相同的键值,则最后一个加入的键-值
对将替换原先的键-值对
.Set KeySet()
返回的键的集合
.Collection values()
返回值的集合
.boolean containsKey(Object key)
如果存在指定键的键值对,则返回TRUE
.Object get(Object key)
通过键值访问集合中的元素 若没有则返回null
.Object remove(Object key)
删除指定键值对应的键值对,并返回该元素
我们还是以上Student类为基础,进行测试
- import java.util.HashMap;
- import java.util.Map;
- public class TestStudent
- {
- public static void main(String args [])
- {
- //实例化一个HashMap对象
- Map students = new HashMap();
- //创建Student类的对象
- Student rose = new Student("rose",25,"singing");
- Student jack = new Student("jack",27,"reading");
- Student mimi = new Student("mimi",29,"dancing");
- //利用put()方法存储对象
- students.put(rose.getName(),rose);
- students.put(jack.getName(),jack);
- students.put(mimi.getName(),mimi);
- //返回键值集合
- System.out.println(students.keySet());
- //返回值集合
- System.out.println(students.values());
- //利用ContainsKey()方法判断是否存在指定对象
- if(students.ContainsKey(rose.getName()))
- {
- System.out.println("存在ROSE对象");
- }
- //根据键值删除对象
- students.remove(rose.getName());
- }
- }
很有意思··可以深入研究研究····