对java集合的理解

 

为什么需要集合?

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

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

 

什么是集合?  

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

  

  集合框架满足的条件:

                        1.对外接口

                        2.具体实现类

                        3.算法

  

  

  

如上图我们通常使用的集合实现类有三个:ArrayListLinkedListHashMap

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

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

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

  

  

  

集合使用过程:

1步:封装对象

2步:声明对象

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

4步:声明集合

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

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

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

public class Book {

/*声明对象*/

private String name;

    /*gettersetter方法*/

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;

}

}

  

  

    /**

 * HashMap用法

 */

public static void main(String[] args) {

       /*声明对象*/

 Book c=new Book("c语言");

 Book sql=new Book("SQl数据库");

 Book java=new Book("java程序设计");

 

 /*声明集合*/

 Map a=new HashMap();

 

 /*向集合中加入数据*/

 a.put("001", c);

 a.put("002", sql);

 a.put("003",java);

 

 /*打印集合长度*/

 System.out.println("图书的数量是:"+a.size());

 

 /*输出键集合*/

 System.out.println(a.keySet());

 /*输出值集合*/

 System.out.println(a.values());

 /*输出键集合和值集合*/

 System.out.println(a);

 

 System.out.println("------------------------------------------------------");

 /*打印集合长度*/

 System.out.println("图书的数量是:"+a.size());

 

 System.out.print("请输入图书编号:");

 Scanner input=new Scanner(System.in);

 

 String id=input.next();

 

 

 /*判断集合中是否有书本编号是001的书*/

 if(a.containsKey(id)){

 System.out.println(a.get(id));

 }

 else{

 System.out.println("对不起,没有这本书的编号");

 }

 

 }

}

  

  

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

  

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

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

  

  

  

  

  

  

 

你可能感兴趣的:(java基础)