Day12


在这里插入图片描述

Day12 枚举和容器

一、enum 枚举

可以用来表示一种事物的所有可能

注意:

  •  1.枚举都隐示的继承自java.lang.Enum
    
  •  2.枚举也是一种比较特殊的类,枚举中得饿所有成员都是当前枚举类的一个实例(对象),成员默认public static final修饰
    
  •  3.不允许外部实例化,只能使用枚举类中提供的成员
    

格式:

​ //1.成员

​ //2.属性

​ //3.无参构造器

​ //4.有参构造器

​ //5.行为功能

举例:

//枚举类
enum Week{
   //枚举的成员,当前 枚举类的实例(对象),这些由我们程序员指定,只能有这些,不能外部new实例化-->所以称为当前这个类的所有可能
   Mon,Tue,Sun("第七天",10);  //Sun("第七天") ->Sun对象名  (参数)-->构造器的实参
   
   //属性
   private String name;
   private int num;
  
   private Week() { // TODO Auto-generated constructor stub
   }
  
   private Week(String name) {
      this.name = name; 
   } 
  
   private Week(String name, int num) {
      this.name = name;
      this.num = num;
   }

   public String getName() {
        return name; 
   }

}
public class EnumDemo01 {
   public static void main(String[] args) {
      //new Student().weekday = WeekDay.Mon;
      
      //枚举类型实例的获取
      Week w = Week.Sun;
      //成员名字
      System.out.println(w.name());
      //索引
      System.out.println(w.ordinal());
      
      //w.setName("周日");
      System.out.println(w.getName()); 
      w.test();
       
      
      //判断枚举类型的
      switch(w) {
      case Mon:
         System.out.println("周一");
         break;
      case Sun:
         System.out.println("周天");
         break;
      }
   }
}

二、容器

1.定义

  • 容器:
  • 容器的长度可以根据数据的多少自动增删
  • 是引用数据类型
  • 容器中可以存储任意类型的数据

2.数组的特性 --> 与容器区别

容器类似于数组,但有区别

  • 数组和容器: 都可以存储多个数据
  • 数组的特点:
  • 有序,索引
  • 数据类型一致
  • 长度一旦确定不可改变

3.代码举例、格式

Collection接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZxjONJ6P-1594236901240)(D:/study/Doc/Note/image-20200708225232996.png)]

import java.util.ArrayList;
import java.util.List;

public class ContainerDemo01 {
    public static void main(String[] args){
        //数组
        Person[] arr = {new Person(), new Person()};
        System.out.println(arr.length);

        //容器的使用
        List list = new ArrayList();
        list.add("zhangsan");	//添加成员
        list.add(456);
        list.add(new Person());
        System.out.println(list.size());		//打印容器成员个数

        list.remove(0);		//根据索引删除成员
        System.out.println(list);			//打印容器所有成员
        System.out.println(list.size());

        System.out.println(list.get(0));		//根据索引,打印指定成员
        System.out.println(list);

        System.out.println(list.get(-1));		//超出范围,报错
        System.out.println(list);
        
       	//修改

    }
}

class Person{}

4.特性

  • 容器中只能存放引用数据类型的数据
  • Collection:
  • 一些实现类可重复有序List 一些不可冲无序Set

*定义自定义的引用数据类型的数据,存放在容器中ArrayList

5.迭代器 -------?

  • 遍历方式:

  • 1.增强for foreach

  • 2.迭代器

    //迭代器
    //1.获取容器的迭代器
    Iterator it = coll2.iterator();
    //2.循环判断是否存在下一个元素
    while(it.hasNext()) {
       //3.获取
       System.out.println(it.next());
    }
    

List 接口

  • List 接口 有序可重复
  • 新增了一些根据索引操作的方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hWEzSkmi-1594236901243)(D:/study/Doc/Note/image-20200708224945007.png)]

泛型
//准备一个List容器,存放我喜欢的电影名字
//泛型: 规定使用数据的类型-->好处增强程序的可读性和稳定性。
//只能存放字符串类型
List<String> list = new ArrayList<String>();
list.add("记忆碎片 ");
list.add("无间道");
list.add("星际穿越");
list.add("后来的我们");
System.out.println(list);

List常用

//add增添 (在容器指定索引位置增添,原位置元素及后面的统一后移一个索引位置)
list.add(3, "时间规划局");
list.add(5, "无间道");
System.out.println(list);

//get 获取
System.out.println(list.get(2));

//indexOf 根据元素查找对应索引,默认从前往后
System.out.println(list.indexOf("无间道"));
System.out.println(list.lastIndexOf("无间道"));

System.out.println("------");
//remove 移除,有重复的默认第一个,索引、元素名都可
System.out.println(list.remove(4));
System.out.println(list);

//替换
System.out.println("------");
System.out.println(list.set(4,"头号玩家")); //此行只会打印被替换的元素名,容器里的已被替换,但不会打印
System.out.println(list);

ListIterator 列表迭代器

        //ListIterator 列表迭代器
        ListIterator it2 = list.listIterator();
        while (it2.hasNext()){
            if("灭霸".equals(it2.next())){
                it2.add("11111");
            }
//            System.out.println(list);		//遍历,有一个元素,就打印一次

List 接口的实现

  • AarryList :
  • 底层实现: 可变数组实现的,内部 通过数组拷贝实现根据内容可变长
  • 优点 : 根据索引查询效率高
  •     缺点 :错增加删除时效率低,因为要通过数组拷贝实现
    
  • 应用场景: 存储耽搁数据,有序可以重复–>大量做查询,少量增删,推荐使用ArrayList
  • 扩容: 在第一次添加数据时候初始容量10 , 通过Arrays.copyof方法进行动态扩容,每次扩容原容量的1.5倍 int newCapacity = oldCapacity + (oldCapacity >> 1);
  • Vector:
  •  底层实现:  可变数组实现的,
    
  • 扩容:: 在第一次添加数据时候初始容量10 ,  每次扩容原容量的2倍
    
  • 与ArrayList不同点: 1)AarryList线程不安全 ,vector线程安全 2)扩容问题: ArrayList1.5倍增长 vector2倍增长 ArrayList更有利于节省内存
  • LinkedList:
  • 底层实现: 双向链表实现的
    *优点:增删效率高
  • 缺点: 查询效率低
  • 应用场景: 存储耽搁数据,有序可以重复–>如果做大量的增删,少量的查询,推荐使用LinkedList
  • ArrayList()
          构造一个初始容量为 10 的空列表。 
ArrayList(Collection<? extends E> c) 
          构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。 
ArrayList(int initialCapacity) 
          构造一个具有指定初始容量的空列表。 

->如果做大量的增删,少量的查询,推荐使用LinkedList
*

  • ArrayList()
          构造一个初始容量为 10 的空列表。 
ArrayList(Collection<? extends E> c) 
          构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。 
ArrayList(int initialCapacity) 
          构造一个具有指定初始容量的空列表。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值