java枚举和容器(一)

枚举

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

枚举类

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 void test() { 
		  System.out.println("今天是"+name); 
	}
	 
	
}

注意:

​ 1.枚举都隐示的继承自java.lang.Enum

​ 2.枚举也是一种比较特殊的类,枚举中得饿所有成员都是当前枚举类的一个实例(对象),成员默认public static final修饰

​ 3.不允许外部实例化,只能使用枚举类中提供的成员

public static void main(String[] args) {
		//枚举类型实例的获取
		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;
		}
	}

容器

数组和容器:都可以存储多个数据

数组的特点:

  • ​有序,可根据索引快速查找
  • 数据类型一致
  • 长度一旦确定不可改变

容器:

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

容器的使用

    List list = new ArrayList();
    list.add("zhangsan");
    list.add(123);
    list.add(new Person());
    System.out.println(list.size());
    list.add(new Person());
    System.out.println(list.size());

    System.out.println(list);
    list.remove(0);
    System.out.println(list.size());
    System.out.println(list.get(-1));		

Collection:

​一些实现类可重复有序(List) 一些不可重复无序(Set)

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

public static void main(String[] args) {
		Collection coll = new  ArrayList();
		Collection coll2 = new  ArrayList();
		Collection coll3 = new  ArrayList();
		coll.add(123);   // 自动装箱
		coll.add(456);   // 自动装箱
		
		//添加
		coll2.add("000");
		
		System.out.println(coll2);
		coll2.addAll(coll);
		System.out.println(coll2);
		
		System.out.println(coll);
		//清空
		coll.clear();
		System.out.println(coll);
		
		//boolean contains(Object o)  包含
		System.out.println(coll2.contains("000"));
		
		coll3.addAll(coll2);
		//boolean equals(Object o)  比较内容是否相等
		System.out.println(coll2.equals(coll3));
		
		//boolean remove(Object o)  移除
		System.out.println(coll2.remove(123));
		coll2.add(false);
		System.out.println(coll2);
		
		//boolean retainAll(Collection<?> c)  交集
		System.out.println(coll3.retainAll(coll2));
		System.out.println(coll2);
		System.out.println(coll3);
}

迭代器

使用方式:

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

List 接口

有序可重复

public static void main(String[] args) {
		//准备一个List容器,存放我喜欢的电影名字
		//泛型: 规定使用数据的类型-->好处增强程序的可读性和稳定性。
		//只能存放字符串类型
		List<String> list = new ArrayList<String>();
		list.add("记忆碎片 ");
		list.add("无间道");
		list.add("星际穿越");
		list.add("后来的我们");
		System.out.println(list);
		
		//void add(int index, E element)  
		list.add(3, "时间规划局");
		list.add(5,"无间道");
		System.out.println(list);
		
		//E get(int index)  
		System.out.println(list.get(2));
		
		//int indexOf(Object o)  
		System.out.println(list.indexOf("无间道"));  //1
		System.out.println(list.lastIndexOf("无间道"));  //1
		
		//remove()
		System.out.println(list.remove(4));  
		//测试 如果存储的数据是数字,remove以索引还是内容为主?????
		
		// E set(int index, E element)  
		System.out.println(list.set(4, "头号玩家"));
		System.out.println(list);
	}

List 接口的实现AarryList

底层实现: 可变数组实现的,内部 通过数组拷贝实现根据内容可变长

优点 : 根据索引查询效率高

缺点 :错增加删除时效率低,因为要通过数组拷贝实现

应用场景: 存储耽搁数据,有序可以重复–>大量做查询,少量增删,推荐使用ArrayList

扩容: 在第一次添加数据时候初始容量10 , 通过Arrays.copyof方法进行动态扩容,每次扩容原容量的1.5倍 int newCapacity = oldCapacity + (oldCapacity >> 1);

public class ArrayList03 {
	public static void main(String[] args) {
		ArrayList<Person> list = new ArrayList();
		list.add(new Person("zhangsan",18));
		list.add(new Person("zhangsan",18));
		list.add(new Person("lisi",19));
		list.add(new Person("王五",17));
		
		System.out.println(list);
	}
}

class Person{
	private String name;
	private int age;
	
	public Person() {
		// TODO Auto-generated constructor stub
	}

	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
}

ArrayList()
构造一个初始容量为 10 的空列表。
ArrayList(Collection<? extends E> c)
构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
ArrayList(int initialCapacity)
构造一个具有指定初始容量的空列表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值