collection集合

在这里插入图片描述

1.集合的概述:
(1) 集合的是一个可伸缩的容器,可以根据需要进行容器大小的扩展,相比较数组容器,它只能存放引用数据类型的变量。
(2) 集合的分类:
① 单列集合和双列集合;
② 单列集合: list(ArrayList、LinkedList、Vector)、Set(hashSet、LinkedHasaSet、treeSet)
③ 双列集合:Map(hashMap、linkedhashMap、hashtable、treeMap)
2.Collection集合的常用方法
(1) add(E e) 向集合中添加元素
(2) isEmpty() 判断集合是否为空
(3) iterator() //获得集合的迭代器对象
(4) remove(Object o) ;移除掉集合中的元素
(5) size() //获得集合的大小
(6) toArray();//将集合转成一个数组

3.集合的遍历
方式一:

	Object[] ob = co.toArray();
		for (int i = 0; i < ob.length; i++) {
			System.out.println(ob[i]);
		}

方式二:使用迭代器遍历数组

	Iterator<Integer> it = co.iterator();
		//判断迭代器指向的集合的下一个节点还有没有元素
		while(it.hasNext()) {
			//将迭代器的指针指向迭代器包含的结合的下一个位置,并将内容赋值给变量
			Integer num1 = it.next();
			System.out.print(num1 + "\t");
		}
	}

4、集合和数组的区别:
(1) 数组只提供了length 属性,没有任何对数组直接操作的方法,但是可以存放基本数据类型和引用数据类型的数据,集合除了不能存放基本类型的数据外。提供了强大的功能方法,可以对集合中的元素进行任何其他操作,如增删改查。
(2) 如果数组要实现扩容,需要自己去新建一个数组,然后进行复制,集合将这个和程序本身功能实现无关的逻辑封装到了集合中。提升了开发效率。

一:List

1、List集合是Collection 集合的一个子接口,故它拥有Collection 集合的所有方法,他是Collection 集合的一个有序列表集合的接口。(有序列表)。
2、List 集合存放的元素是可以重复。
3、List集合的查询效率较高,我可通过集合的索引来获取集合中的元素。
4、List集合特有的方法:
(1) get(int i) //可以通过集合的索引来获取集合中的元素
(2) Remove(int i);通过索引来移除集合中的元素;

ArrayList
1、该集合是实现是通过数组来进行动态扩容的,是在List集合中最常用 的一个集合的实现类。
2、该集合查询效率很高,可以通过索引直接获取对应位置的元素,但是增删改相对较慢。
3、该集合的底层实现是一个数组。
4、ArrayList(int initialCapacity);通过该种方式可以提高数组的是使用效率。减少反复扩容的时间的时间消耗。
5、创建ArrayList 集合的默认初始化大小是10,在存放的元素超过初始容量后数组的扩容算法是,每次扩容,新容量=(旧容量*3)/2+1;

LinkedList
1、LinkedList是List 接口的子类该集合的底层是使用链表的方式来存放数组元素的。
2、LinkedList 特有的方法:
3、addFirst(E e); 在集合的头部插入一个元素
4、addLast(E e);值尾部添加元素

LinkedList 和ArrayList 主要的区别
1、实现方式不同:
(1) LinkedList是通过链表的方式来实现的,ArrayList 底层是通过数组的方式来实现的。
(2) ArrayList 的查询快,增删慢Linked 查询慢,增删快;
Vector
1、同样是list 接口的子类大部分方法和另外两个两个实现类一致
Vector 和ArrayList的区别:
相同点:底层的实现都是数组。
不同点:
Vector 是线程安全的,而ArrayList 是线程不安全;
ArrayList效率高于Vector;
版本不一致,Vector 是jdk 1.0 的版本,现基本不再使用。

二:Set集合

1、set 集合概述
(1) Set 是Collection 集合的子接口,用来存放不相同的数据。且是无序的。
2、特点:
(1) Set集合也称之为无序列表,故set集合是无序的。
(2) Set 集合中存放的元素是不可重复的。
(3) Set集合的底层实现是hash表。
(4) Set 集合没有索引。
3、Set 集合的常用方法
(1) Add()添加元素
(2) Size() 获得集合的大小
(3) Iterator 迭代器
(4) toArray(T[] a); 该方法参数是一个定义好的数组,返回定义好的数组类型 的数据,需要注意,如果给定的数组长度小于等于集合的长度,使用集合的长度作为新数组的长度如果给定数组的长度小于集合长度,返回 的是创建 的新数组,否则返回给定的数组。如果给定数组的长度大于集合的长度,此时剩余的部分用null 来填充,返回给定的数组。
① 相较于toArray()方法,使用该方法的好处是不需要强转集合数据转成数组中数据的类型。

(5)增强for 循环的使用
① 该循环只能对数组或者集合可以通过该方法来遍历,底层通过迭代器实现。
② 语法结构:

  1. For(数组类型 变量名 : 要遍历的集合或者数组){
    循环体;
  2. }
    LinkedHashSet
    1、LinkedHashSet 是Set集合是实现类,通过链表来实现;
    2、方法参考HashSet
    3、异同:
    (1) HashSet和LinkedhashSet 集合存放的元素都是不可重复的。
    (2) HashSet 是无序的,底层是Hash表,LinkedHashSet 可以保证存放元素的顺序和取出的顺序一致,是通过链表来实现的。
    TreeSet
    1、该类似Set 集合的子类,但是它是有序的,底层是通过二叉树来实现的,不可重复。
    2、需要注意:
    (1) 在使用TreeSet 存放自定义的数据类型时,需要在自定义的类型上去实现Comparable 接口,并且重写该接口下的compareTo方法,重写比较规则。
    (2) 如果是调用者的对象减去参数对象的值,是正序排序,否则是逆序排序。
    实例:
    三种集合的异同:
    相同点: 不可重复
    不同点:
    hashSet 是无序的;
    LinkedHashSet 是有序的;
    TreeSet 是有序且可以根据比较规则对集合中的数据进行排序的。
    他的底层实现不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值