2021-04-12

Day15 集合、List

  1. 集合
    1.1 什么是集合?
    集合是是程序能够存储和操纵元素不固定的一组数据。所有java集合都位于java.util包中。
    数组和集合的区别:
    数组长度固定、可以存放任意类型。
    集合长度不固定,不能存放基本数据类型,只能存放对象的引用。
    1.2 继承体系
    Java的集合类主要由两个接口派生而出:Collection和Map。Collection和Map是Java结合框架的根接口,这两个接口又包含了一些子接口或实现类。在这里插入图片描述
    ArrayList:底层采用了数组这种数据结构。
    优点:查询效率高。
    缺点:随机增删元素效率低。
    LinkedList::底层采用双向链表数据结构。
    优点:随机增删元素效率低。
    缺点:查询效率低。
    Vector:底层也是数组,和ArrayList相似。Vector支持线程同步机制,一般不采用集合自身所带的线程安全机制,效率较低。

1.3 Collection
Collection接口是List接口和Set接口的父接口,它定义的方法可以用于操作List集合和Set集合。
Collection接口定义的方法:
*boolean add(Object obj) 该方法用于集合中添加元素,添加成功返回true。
*void clear 清除集合内所有元素,集合长度为0.
*boolean contains(Object obj) 返回集合中是否包含某个元素。
*boolean containsAll(Collection c) 返回集合里是否包含集合c中所有元素。
*int hashCode() 返回此collection的哈希值。
*boolean isEmpty() 返回集合是否为空,当集合长度为0时返回true
*Iterator iterator() 返回一个迭代器,用于遍历集合中的元素。
*boolean remove(Object obj)删除集合中指定的元素obj,当存在时删除,返回true
*boolean removeAll(Collection c) 删除集合c中所有元素。
*boolean retainAll(Collection c) 删除集合中不在集合c中的元素。
*int size 返回集合中元素的个数
*Object[] toArray() 该方法把集合转换成一个数组,所有集合元素变成对应的数组元素。

//创建一个ArrayList对象,多态
			Collection c = new ArrayList();
			
			//判断集合长度是否为空
			System.out.println(c.isEmpty());
			
			//数组中添加元素
			c.add(1);
			c.add("张三");
			
			//已有元素的个数
			System.out.println(c.size);
			
			//判断是否存在会	调用判断元素的equals方法,挨个和集合中的元素比较
			System.out.println(new integer(1));
			
			//根据内容删除元素,用要删除的元素对象调用equals方法,挨个和集合中的元素进行比较,如果找到删除就返回true 如果未找到就返回false 
			c.remove(1);
			
			注意:当我们自己自定义类型的时候,就需要根据需求自己复写equals方法
			
			Object[] arr = {1,2,3};
			//利用Arrays的asList可以直接把数组转换为集合。
			Collection c1 = Arrays.asList(arr);
			
			//把c集合中的元素全部添加到c中
			c1.addAll(c1);
			
			//集合转换为数组,无参,返回新数组
			Object[]  objArr = c.toArray();
			//利用有参,也能转化为数组,返回值为传入数组的引用。
			Object[] objArr2 = new Object[c.size];
			//由于传引用所以不能接受返回值
			c.toArray(objArr2);
			//遍历
			for(Object object :objArr2){
				System.out.println(object);
			}	

1.4 Iterator:迭代器——迭代器可以遍历集合对象
生成迭代器对象的语法:
Iterator it = 集合对象.iterator();

	迭代器为了方便遍历提供了三个方法:
			1.boolean hasNext() :判断光标下一位是不是还有元素,有是true 没有是false
			2.E next():将迭代器光标向下移动一位,并取出该元素Element
			3.remove():删除当前指向的元素

注意:迭代器一旦创建,集合不能进行添加删除操作,如果添加删除了必须重新生成 迭代器。
代码案例:

public static void main(String[] aegs){
					//创建集合对象
					List list = new ArrayList();
					//向集合中添加元素
					 list.add(1);
					 list.add("张三");
					 //生成迭代器对象
					 Iterator it = list.iterator();
					 while(it.hasNext()){
							Object obj = it.next();
							System.out.println(obj);
				}
	}

1.5 注意
使用contains和remove的时候 如果是自定义类型,需要根据需求覆写equals方法
因为这两个方法底层都会去自动调用对象的 equals方法来进行对象的比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值