第六章 集合框架


1.为什么使用集合框架

   答:如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象一可以使用Java集合框架

2.JAVA集合框架包含的内容

   答:Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中

     

2.1.集合框架包含三大块内容: 对外接口,接口的实现和对集合运算的算法。

    接口:  表示集合的抽象数据类型

    实现:  集合框架中接口的具体实现

    算法:  在实现了某个集合框架中的接口的对象身上某种有用的计算方法 ,Collections : 它提供了对集合进行排列等多种算法实现

  1. Collections: 接口存储一组不唯一(允许重复),无序的对象
  2. Sex :接口继承 Collections 接口,存储了一组唯一(不允许重复),无序的对象
  3. List :接口继承 Collections 接口,存储了一组不唯一(允许重复),有序(以元素插入的次序来放置元素,不会重新排列)的对象
  4. Map :接口中存储一组成对的键值对象,提供Key(键),value(值)的映射
  5. Map中的Key不要求有序,但不允许重复value同样要求有序,但允许重复
  6. lterator 接口是负责定义访问和遍历元素的接口

3.List接口的实现类

    3.1.ArrayList集合类

       ArrayList实现了长度可变的数组,在内存中分配连续的 ArrayList实现了长度可变的数组,在内存中分配连续的 空间。遍历元素和随机访问元素的效率比较高

        不唯一,有序,遍历效率高

    

    3.2. LinkedList集合类

          LinkedList采用链表存储方式。插入、删除元素时效率比较高 

     插入、删除操作频繁时,可使用LinkedList来提高效率LinkedList提供对头部和尾部元素进行添加和删除操作的方法

 4.ArrayList的应用

1 //第1步.声明集合
2 import java.util.*;//表示所有的集合
3 import java.util.List; //第一步调用一个list接口包
4 import java.util.ArrayList;//第二步调用一个list接口下的Arraylist包;
1 list.add(peng1);    //.add()添加数据
2  list.add(peng2);    //Dog类型--》object 装箱0
   list.add(0,peng5);//索引号添加,下标,添加到指定的地方
3 list.size()//表示集合长度
1  //循环输出集合里的数据
2         //1.for循环,索引号遍历
3          for (int i=0;i){
4               penguin peng=(penguin) list.get(i);//object-->Dog拆箱
5              peng.paly();
6          }
1 **************foreach  遍历********************* 
2 for (Object obj:list){
3             ((penguin)obj).paly();      //第二种比较好用
4         }

 1 ************删除*********
2 list.remove(0); //按照下标删除
3 list.remove(peng5); //按照对象名删除
 
1 /**************  contains包含判断对象是否存在  ***************/
2           if (list.contains(peng1)){
3               System.out.println("该名字存在");
4           }else {
5               System.out.println("该名字不存在");
6           }

5.LinkedList的应用

    LinkedList的特殊方法:

   

1 //Linkedlist添加元素的特殊的方式
2         list.addFirst(peng4);//将元素添加到第一位
3         list.addLast(peng1);//将指定元素添加到最后一位

//********* 获得第一个对象      *********
((penguin)list.getFirst()).paly();

//********* 获得最后一个对象   *********
((penguin)list.getLast()).paly();

System.out.println("删除一个对象");
list.removeFirst();

System.out.println("删除最后一个对象");
list.removeLast();

6.HashMap集合类

  6.1.每个元素都由两个对象组成,即一个键对象和一个值对象,可以根据键实现对应值的映射。

 1 import java.util.Map;//第一步声明Map接口
 2 import java.util.HashMap;//2.声明HashMap类
 3 
 4       1 //往HashMap添加数据
 5         Map map=new HashMap();
 6        // put (object key键名 ,Object value值)
 7              map.put("CN","中华人民中和国");
 8 
9 2 //通过key获得值 10 String name=(String)map.get("CN");

3//显示集合中的个数
System.out.println(map.size());

1  4 // 两次判断Map接口中是否存在FR键名
2         //map.containsValue("中华人民中和国");
3        if (map.containsKey("CN"))//键名
4        {
5            System.out.println("此集合包含CN");
6        }else {
7            System.out.println("此集合不包含CN");
8        }
1 //7-分别显示键集,值集,键值对集合
2        System.out.println(map.keySet());//键名集合,对象名.keySet()
3         System.out.println(map.values());//值的集合,对象名.values()
4         System.out.println(map);//对象名

1    //8.foreach遍历
2        for (Object obj: map.keySet()){
3            System.out.println("键名集合"+obj.toString());//obj要进行类型转换
4        }
5 
6        for (Object obj:map.values()){
7            System.out.println("values值集合"+obj.toString());//obj要进行类型转换
8        }
1         /**
2          * 9.清空HashMap,并判断
3          */
4             map.clear();//清空HashMap里的数据
5         if (map.isEmpty()){
6             System.out.println("已将所有的Map接口清空");
7         }

  7.重点:

                          

 8.迭代器Iterator

      8.1. Collection 接口的iterator()方法返回一个Iterator,然后通过Iterator接口的两个方法即可方便地实现遍历

         1.2.boolean  hasNext():判断是否存在另一个可访问的元素。

         1.3.Object.next():返回要访问的下一个元素


         Map map=new HashMap();

1
//方式1.迭代器方式 2 Set keys=map.keySet(); 3 //获得Iterator对象 4 Iterator it=keys.iterator(); 5 while (it.hasNext()){ 6 String key=(String)it.next();//获得键值 7 System.out.println(key); 8 9 penguin peng=(penguin) map.get(key); 10 peng.paly(); 11 }
12 //方式2.for增强版 13 for (Object obj:keys)//通过键来获得值 14 { 15 penguin peng=(penguin) map.get(obj); 16 peng.paly(); 17 }


9.泛型集合

     9.1.List泛型集合的应用  

 1 import java.util.*;
 2 public class TestCollection {
 3     public static void main(String[] args) {
 4          Listpen=new LinkedList<>();//创建List泛型集合
 5 
 6         penguin peng1=new penguin("王铁根","呀呼呀呼",90,100,"帝王企鹅??");
 7         penguin peng2=new penguin("王大锤","呜呼呜呼",70,90,"帝王企鹅??");
 8         penguin peng3=new penguin("罗大柱","有忽有忽",50,100,"帝王企鹅??");
 9         penguin peng4=new penguin("王翠花","呀呼呀呼",100,60,"帝王企鹅??");
10 
11         pen.add(peng1);
12         pen.add(peng2);
13         pen.add(peng3);
14         pen.add(peng4);
15         //1.得到里面的值
16         pen.get(1).paly();
17 
18         //2.删除,按下标删
19         pen.remove(0);
20         //pen.remove("王铁根");//按值来删
21 
22         //遍历输出
23         for (penguin obj:pen) {
24             obj.paly();  //无需类型转换
25         }
26     }
27 }

   9.2.9.1.Map泛型集合的应用

      

 1 import java.util.*;
 2 public class TextMapList {
 3     public static void main(String[] args) {
 4     Mappen=new HashMap();
 5         penguin peng1=new penguin("王铁根","呀呼呀呼",90,100,"帝王企鹅??");
 6         penguin peng2=new penguin("王大锤","呜呼呜呼",70,90,"帝王企鹅??");
 7         penguin peng3=new penguin("罗大柱","有忽有忽",50,100,"帝王企鹅??");
 8         penguin peng4=new penguin("王翠花","呀呼呀呼",100,60,"帝王企鹅??");
 9 
10         //添加数
11         pen.put(peng1.getName(), peng1);
12         pen.put(peng2.getName(), peng2);
13         pen.put(peng3.getName(), peng3);
14         pen.put(peng4.getName(), peng4);
15 
16         //遍历输出
17         //方式1.迭代器方式
18          Set keys=pen.keySet();
19         //获得Iterator对象
20         Iterator it=keys.iterator();
21         while (it.hasNext()){
22             String key=(String) it.next();
23             pen.get(key).paly();
24         }
25 
26         for (Object key:keys){
27             System.out.println(key);
28             pen.get(key).paly();
29         }

相关