小饶学编程之JAVA SE第一部分——JavaSE 核心类库:13集合框架(一):List集合 、Set集合 、Map集合

  • Post author:
  • Post category:java




一、数组、类和集合的特点

数组特点:类型固定,长度固定

类的特点:不同类型的成员属性,共同描述一个实体类

集合特点:类型不固定,长度也不固定,随意存放任何数据



二、集合框架的继承结构

在这里插入图片描述



三、List

List 接口存储一组不唯一(可以重复),有序(插入顺序)的对象。



3.1ArrayList

存储原理是一个数组。

在这里插入图片描述

在这里插入图片描述



3.2LinkedList

存储原理是一个链表,在元素的前后分别有一个前置结点和后置结点,用于连接集合中的上一个元素和下一个元素,依次“手拉手”,构成一条链式数据的集合。

除了ArrayList的方法外,还有一些特有的方法

在这里插入图片描述



3.3对比

  • ArrayList实现了长度可变的Object类型数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高
  • LinkedList采用链表存储方式,插入、删除元素时效率比较高


效率不同的原因:


Linkedlist在执行删除和添加操作时,只会对相邻的两个元素有影响,

Arraylist由于它的本质是一个数组,在执行删除和添加操作时,后面所有的元素的地址值都将出现移位。



3.4遍历

  • (1)循环遍历
      System.out.println(alist);
  • (2)for循环
   for (int i = 0; i <alist.size() ; i++) {
          System.out.println(alist.get(i));
      }
  • (3)增强for循环

    for (Object o:alist

    ) {


    System.out.println(o);

    }

  - (4)迭代器--搭配while循环
```javascript
   Iterator it = alist.iterator();//创建迭代器对象
        while(it.hasNext()){
       System.out.println(it.next());
        }



3.5特例

   public static void main(String[] args) {
      
            ArrayList list = new ArrayList();
            list.add("hello");
            list.add(666);
            list.add(1);//int-Integer
            System.out.println(list);
            list.remove(new Integer(1));//删除了集合中的1
            //list.remove(1);//删除了集合中下标为1的元素
            System.out.println(list);
        
    }



四、Set集合



4.1特点:

存储一组

唯一

(不允许出现重复的元素),

无序

(没有index下标)的

对象

,HashSet是Set接口常用的实现类。

只有添加和删除的方法,没有修改和查找的方法。



4.2方法

//创建Set集合
  HashSet set = new HashSet();
       //添加数据
       set.add("曹操");
       set.add("刘备");
       set.add(66);
       //删除
       set.remove(66);
       //获取所有元素-循环遍历增强for循环或者迭代器
       //循环中加上if判断,可以查找元素
       for (Object o:set
            ) {
           System.out.println(o);
       }
       
       Iterator it = set.iterator();
       while (it.hasNext()) {
           System.out.println("it.next() = " + it.next());
       }



五、Map集合



5.1特点

Map接口专门处理键值映射的数据,可以根据键实现对值的操作。

map(key,value),key不允许重复,一个key对应一个value(唯一的映射)



5.2方法

 public static void main(String[] args) {
       	//创建Map接口的常用实现类HashMap对象,存入数据
        HashMap map = new HashMap();
        //增加方法
        map.put(1,"曹操");
        map.put(1,"孙权");
        map.put("蜀国","孔明");
        System.out.println(map.size());
        //特点:key不允许重复,一个key对应一个唯一的value
        //删除方法
        Object o= map.remove(1);
        boolean b =map.remove(1,"曹操");
        System.out.println(o);//删除的value
        System.out.println(b);//是否删除成功
        //替换方法
        map.replace("蜀国","庞统");
        System.out.println(map);
        map.replace("蜀国","庞统","张飞");
        System.out.println(map);
        }



5.3遍历



5.3.1遍历所有key

		 Set keys = map.keySet();
        for (Object key:keys){
            System.out.println(key+"--"+map.get(key));
        }



5.3.1遍历所有value

 		Collection values = map.values();
        for (Object value:values
             ) {
            System.out.println(value);

        }



5.3.1遍历所有键值对

  	 	Set entries = map.entrySet();
        for (Object entrie:entries
             ) {
            Map.Entry en = (Map.Entry) entrie;//向下转型,Object-》Map.Entry
            System.out.println(en.getKey()+"---"+en.getValue());
        }

备注:

函数:一个x对应一个y

方程:一个x对应多个y



版权声明:本文为weixin_46460843原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。