JAVA集合框架

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类

Code:
  1. public class Student   
  2. {   
  3.         //有参构造函数   
  4.   
  5.     public Student(){]   
  6.     //无参构造函数   
  7.   
  8.     //属性并封装   
  9.   
  10.     private String name;   
  11.         private int age;   
  12.         private String hobby;   
  13.   
  14.         public void setName(String name)   
  15.        {   
  16.                this.name = name;   
  17.        }   
  18.         public String getName()   
  19.        {   
  20.                return this.name;   
  21.        }   
  22.   
  23.        public void setAge(int age)     
  24.        {   
  25.               if(this.age > 0 && this.age < 100)   
  26.              {   
  27.                    this.age = age;   
  28.              }   
  29.              else  
  30.             {   
  31.                   this.age = 20;   
  32.             }   
  33.        }   
  34.        public int getAge()   
  35.        {   
  36.              return this.age;   
  37.        }   
  38.   
  39.        public void setHobby(String hobby)   
  40.       {   
  41.            this.hobby = hobby;   
  42.       }   
  43.       public String getHobby()   
  44.       {   
  45.              return this.hobby;   
  46.       }   
  47.                   
  48.              
  49. }  

随后我们编写一个测试类TestStudent

Code:
  1. import java.util.List;           //导入List接口所在包   
  2. import java.util.ArrayList;  //导入ArrayList类所在包   
  3.   
  4. public class TestStudent   
  5. {   
  6.           public static void main(String args [])   
  7.           {   
  8.                          
  9.                     //创建集合ArrayList   
  10.                    List students = new ArrayList();   
  11.                    //初始化Student类的对象   
  12.          Student rose = new Student("rose",24,"singing");   
  13.                   Student jack = new Student("jack",27,"reading");   
  14.                   Student mimi = new Student("mimi",28,"dancing");   
  15.   
  16.                   //利用Add()方法添加元素    
  17.          students.add(rose);   
  18.                   //Add()方法返回BOOLEAN   
  19.                   if(students.add(jack))   
  20.                  {   
  21.                       System.out.println("添加成功!");   
  22.                  }   
  23.                  //利用Add(int index,Object o)添加元素   
  24.         students.add(1,mimi);   
  25.   
  26.                 //利用Size()方法查看当前集合中的元素总数   
  27.         System.out.println("当前集合中所包含元素数量为:" + students.size());   
  28.                //读取单个元素,因为存入进该集合中的元素类型都会变为object类型,所以,读取出来后,需要进行强制类型转换.   
  29.                //读取单个元素需要用到get(int index)方法    
  30.         Student stu = (Student) students.get(1);   
  31.                 System.out.println(stu.getName());   
  32.   
  33.                //删除元素,有两种方式   
  34.        //<1>Remove(int index)   
  35.               students.remove(0);   
  36.               System.out.println("当前元素数量为:" + students.size());   
  37.               //<2>Remove(Object o)   
  38.               students.remove(jack);   
  39.               System.out.println("当前元素数量为:" + students.size());   
  40.                          
  41.           }   
  42. }  

关于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

Code:
  1. import java.util.LinkedList;   
  2.   
  3. public class TestStudent   
  4. {   
  5.            public static void main(String args [])   
  6.           {   
  7.                       //创建LinkedList对象   
  8.                       LinkedList students = new LinkedList();   
  9.                       //创建Student类的对象   
  10.            Student rose = new Student("rose",24,"singing");   
  11.                       Student jack = new Student("jack",27,"dancing");   
  12.                       Student mimi = new Student("mimi",28,"reading");   
  13.   
  14.                       students.add(rose);   
  15.                       students.add(jack);   
  16.                       students.add(mimi);   
  17.   
  18.                       //利用LinkedList扩展的getFirst(),getLast()获取单个元素   
  19.            //要进行强制类型转换   
  20.            Student stu = (Student)students.getFirst();   
  21.                       System.out.println(stu.getName());   
  22.                          
  23.                       //利用removeFirst()方法删除元素,该方法删除列表首部的元素,   
  24.            //并且返回该元素   
  25.            students.removeFirst();   
  26.           }   
  27. }  

以上,我们只是简单了介绍了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类为基础,进行测试

Code:
  1. import java.util.HashMap;   
  2. import java.util.Map;   
  3.   
  4. public class TestStudent   
  5. {   
  6.           public static void main(String args [])   
  7.           {   
  8.                 //实例化一个HashMap对象    
  9.         Map students = new HashMap();   
  10.                 //创建Student类的对象   
  11.         Student rose = new Student("rose",25,"singing");   
  12.                 Student jack = new Student("jack",27,"reading");   
  13.                 Student mimi = new Student("mimi",29,"dancing");   
  14.   
  15.                 //利用put()方法存储对象   
  16.         students.put(rose.getName(),rose);   
  17.                 students.put(jack.getName(),jack);   
  18.                 students.put(mimi.getName(),mimi);   
  19.                   
  20.                 //返回键值集合   
  21.         System.out.println(students.keySet());   
  22.                //返回值集合   
  23.         System.out.println(students.values());   
  24.   
  25.               //利用ContainsKey()方法判断是否存在指定对象   
  26.        if(students.ContainsKey(rose.getName()))   
  27.               {   
  28.                     System.out.println("存在ROSE对象");   
  29.               }   
  30.   
  31.               //根据键值删除对象   
  32.        students.remove(rose.getName());   
  33.                  
  34.                    
  35.           }   
  36. }  

很有意思··可以深入研究研究····

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
掌握集合的概念、体系结构、分类及使用场景 2)了解Set接口及主要实现类(HashSet、TreeSet) 3)了解List接口及主要实现类(ArrayList、LinkedList、Vector) 4)了解Map接口及主要实现类(HashMap、TreeMap、HashTable) 二、实验内容及步骤 1、编写程序练习将以下5个Person类的对象放在一个HashSet中。 姓名:张三 身份证号:178880001 姓名:王五 身份证号:178880002 姓名:李四 身份证号:178880003 姓名:王五 身份证号:178880002 姓名:李四 身份证号:178880004 注意:因为Person类是自定义类,需要重写hashCode()方法和equals()方法,并规定只有姓名和身份证号都相等,则对象相等。 其中计算哈希码的算法:(31 + ((name == null) ? 0 : name.hashCode()))*31 + id (注:name:Person对象的姓名,id:Person对象的身份证号) 主方法中作如下测试: 1)创建一个可放置Person类对象的HashSet; 2)依次添加上述5个对象到HashSet中; 3)把集合中的元素打印出来(使用迭代器Iterator) 2、编写程序练习List集合的基本使用: 1) 创建一个只能容纳String对象名为names的ArrayList集合; 2)按顺序往集合中添加5个字符串对象:"张三"、"李四"、"王五"、"马六"、"赵七"; 3)对集合进行遍历,分别打印集合中的每个元素的位置与内容; 4)打印集合的大小,然后删除集合中的第3个元素,并显示删除元素的内容,然后再打印目前集合中第3个元素的内容,并再次打印集合的大小。 3、编写程序练习Map集合的基本使用: 1)创建一个只能容纳String对象的person的HashMap集合; 2)往集合中添加5个"键-值"对象: "id"-"1"; "name"-"张三"; "sex"-"男"; "age"-"25"; "hobby"-"爱学Java" 3)对集合进行遍历,分别打印集合中的每个元素的键与值; 4)打印集合的大小,然后删除集合中的键为age的元素,并显示删除元素的内容,并再次打印集合的大小。 四、思考题 1、集合中的List、Set、Map有哪些不同? 2、为什么使用集合框架,而尽可能少用数组作为存储结构? 3、如何使用TreeSet实现第一题?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值