为什么需要集合?

c语言学习中,当我们遇到大量相同类型数据时,我们会定义该类型数组来存数这些数据,在java中,我们在面向对象编程中常常需要定义很多相同属性和方法的对象,那么这些对象存储在哪里,怎么存储才能使用户访问这些对象更加的快捷方便?对比c语言中数组java中集合具有相同的功能,但是集合具有动态存储的特点,可以更加灵活的存储、访问、调用对象。

  在面向对象编程中,当存储的对象个数不确定时,以及存储的对象是复杂对象,具有映射关系时,我们就需要用集合存储。集合可以理解存放一组相同属性和方法的对象的容器。

 

什么是集合?  

  集合框架概念:处理集合中元素提供一系列算法的机制。

  

  集合框架满足的条件:

1.对外接口

2.具体实现类

3.算法

  

  

  

如上图我们通常使用的集合实现类有三个:ArrayList、LinkedList、HashMap

ArrayList:数组方式存储。 集合长度不定长,可动态存数数据,频繁循环遍历访问集合内元素时使用

LinkedList:链表方式存储。长度可动态改变,频繁插入集合内元素时使用

HashMap:采用键—值的存储方式,长度可动态改变

  

  

  

集合使用过程:

第1步:封装对象

第2步:声明对象

第3步:确定要使用的集合类型

第4步:声明集合

第5步:将声明的对象添加到集合中

第6步:调用集合内对象内属性

例如:根据图书编号查找书库中是否有这本书。

public class Book {
/*声明对象*/
private String name;
、setter方法*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
  
/*构造方法*/
public Book(String name) {
super();
this.name = name;
}
/*String toString方法*/
@Override
public String toString() {
return name;
}
}
  
  
    /**
用法
 */
public static void main(String[] args) {
声明对象*/
语言");
数据库");
程序设计");
 
声明集合*/
 Map a=new HashMap();
 
向集合中加入数据*/
 a.put("001", c);
 a.put("002", sql);
 a.put("003",java);
 
打印集合长度*/
图书的数量是:"+a.size());
 
输出键集合*/
 System.out.println(a.keySet());
输出值集合*/
 System.out.println(a.values());
输出键集合和值集合*/
 System.out.println(a);
 
 System.out.println("------------------------------------------------------");
打印集合长度*/
图书的数量是:"+a.size());
 
请输入图书编号:");
 Scanner input=new Scanner(System.in);
 
 String id=input.next();
 
 
判断集合中是否有书本编号是001的书*/
 if(a.containsKey(id)){
 System.out.println(a.get(id));
 }
 else{
对不起,没有这本书的编号");
 }
 
 }
}

  

  

1. 集合本身给我们提供了getSize()、get()等方法调用集合内对象属性,但是任何对象在加入集合类后,自动转为objec类型,取出时要进行强制类型转换,恢复特定的类型

  

2.LinkedList提供给我们getFirst()、getLast()、addFirst()、addLast()、removeFirst()、removeLast()六个特有的方法,所以在声明LinkedList集合时,要采用LinkedList 对象名=new LinkedList(); 的方式声明,不能以List 对象名=new LinkedList();的方式出现,否则LinkedList()以List的身份出现LinkedList()本身所带的特有属性将会丢失。(子类以父类的身份出现时子类本身特有的方法将丢失)

3.在LinkedList()集合中,指定索引位置插入元素时,原来索引位置元素数据不会被覆盖,将会被应用到下一个索引位置存储。