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

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

数组特点:类型固定,长度固定
类的特点:不同类型的成员属性,共同描述一个实体类
集合特点:类型不固定,长度也不固定,随意存放任何数据

二、集合框架的继承结构

在这里插入图片描述

三、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝皮蛋瘦肉粥的小饶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值