集合的整理(List,Set详解)

集合的整理(List,Set详解)

集合的特点:

  • 1.集合能够对数据进行增加删除修改查询的操作

  • 2.集合能够存储引用类型,如果是基本类型可以是包装类类型

  • 3.集合的长度是可变的

集合和数组的区别:

1.长度区别:数组固定,集合可变
2.内容区别:数组可以使基本类型,也可以是引用类型,集合只能是引用类型
3.元素内容:数组只能储存同一种类型的数据,集合可以储存不同类型的数据(其实集合一般存储的也是同一种类型)

在这里插入图片描述

概述:

  • List,set,Map都是接口,前连个继承至Collection接口,Map为独立接口

  • Set下有HashSet,LinkHashSet,TreeSet

  • List下有ArrayList,Vector,LinkedList

  • Map下有Hashtable,LinkedHashMap,HasMap,TreeMap

  • Collection接口下还有Queue接口,有PriorityQueue类

一.Collection 接口的接口,对象的集合(单列集合)

List接口:元素按进入先后有序保存,可重复(有序可重复)

ArrayList:

1.Java.util包

2.构造方法:

无参构造:ArrayList list=new ArrayList();

3.限定存储数据类型构造方法:

ArrayList< String > str = new ArrayList<>();

4.常用API:增删改查

        -》增加数据:add(E e)/add(int index,E e)
		-》删除数据:remove(E e)/remove(int index)
		-》修改数据:set(int index,E e)
		-》查询数据:get(int index)

5.集合操作

(1)addAll(Collection c) 并集
			removeAll(Collection c) 差集
			retainAll(Collection c) 交集
			indexOf()
			lastIndexOf()
			isEmpty()
			iterator() 获取List对应的迭代器
			size()
			.........
优点:

底层数据结构是数组,查询快,增删慢

缺点:

线程不安全,效率高

特点:

存储数据分配连续内存空间,类似于动态数据,适合便利轮训,不适合插入数据,没有同步。

LinkedList:

1.Java.util包

2.构造方法:

无参构造:LinkedList list = new LinkedList();

3.限定存储数据类型构造方法

LinkedList str = new LinkedList<>();

4.常用API:增删改查

        -》增加数据:add(E e)/add(int index,E e)
		-》删除数据:remove(E e)/remove(int index)
		-》修改数据:set(int index,E e)
		-》查询数据:get(int index)
		-》addFrist()
		-》addLast()

5.集合操作

(1)addAll(Collection c) 并集
			removeAll(Collection c) 差集
			retainAll(Collection c) 交集
			indexOf()
			lastIndexOf()
			isEmpty()
			iterator() 获取List对应的迭代器
			size()
			.........
底层
    底层使用双向链表;对于频繁的插入、删除操作,我们建议使用此类,因为效率高;
优点:

底层数据结构是链表,查询慢,增删快(与ArrayList相反)

缺点:

线程不安全,效率高

特点:

存储数据是采用链表的形式,适合数据插入,不适合遍历轮询。

Set:(无序,唯一)

1.Java.util包

2.数据存储:

存储的是value

3.构造方法:

           无参构造方法:HashSet set = new HashSet()
			指定存储的数据类型:HashSet<String> set = new HashSet<>();

4.常用API:增删改查

            -》增加数据:add()
			-》删除数据:remove()只能通过数据的引用删除,
			-》没有修改方法
			-》查询
			-》只能通过迭代器 it = set.iterator()
					while(it.hasNext()){
						it.next()
					}
					
			-》contains() 是否包含某个元素
			-》isEmpty()  检查集合中元素是否为空

5.相同元素:

后面的是否会覆盖前面的元素?

如何实现集合中的元素不重复?
       条件一:首先判断加入HashSet集合中的对象进行equals比较  判断返回结果是否为true
	   条件二:判断加入HashSet集合中的元素的hashCode码是否一致

HashSet

底层数据结构是哈希表。(无序,唯一)
如何来保证元素唯一性?
1.依赖两个方法:hashCode()和equals()

LinkedHashSet

底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
1.由链表保证元素有序
2.由哈希表保证元素唯一

TreeSet

底层数据结构是红黑树。(唯一,有序)
1. 如何保证元素排序的呢?
      自然排序
      比较器排序
2.如何保证元素唯一性的呢?
根据比较的返回值是否是0来决定

Vector:

1.Java.util包

2.ArrayList早期版本

StringBuffer StringBuilder

3.构造方法:

无参构造: Vector vec=new Vector();

4.限定存储数据类型构造方法

Vectort vec = new Vector<>();

5.常用API:增删改查

       增删改查	
		add()
		remove()
		set()
		get()
		size()
		.....
Vector:

类似动态数据的形式存储数据,但是Vector扩容是以2倍的方式

优点:

底层数据结构是数组,查询快,增删慢线程是同步的,

缺点:

安全性高,效率低。

Stack:

1.Java.util包

2.存储特点:

先进后出,后进先出

3.构造方法:通常用无参构造

4.Stack特殊方法:

        empty() 检测栈中元素是否为空     
        push()  将元素压入栈中
		pop()   将栈顶的元素删除
		peek()  查看栈顶的元素但是不删除
		search() 查找元素在栈中的位置,查找出的索引从1开始

5.为什么要使用栈?

        悔棋
		撤销功能

Queue:队列(也是线性结构)

1.Java.util包

2.(是一个接口)存储特点:

实现数据的先进先出,后进后出的数据结构

3.常用的实现类:

   LinkedList(除了是list的实现类之外,还是Deque的实现类), ArrayDeque/Deque(双端队列)

4.常用的方法对比:

  List接口中
				add()
				remove()
				element()-->get()
				
			Queue特有的方法
				offer()   添加元素,相当于add
				peek()    查看队列中第一个元素
				poll()    删除队列底端的第一个元素
				pop () 弹栈
				push()压栈
5.队列应用
       抢购秒杀
		抢答   

底层

   顺序/链表

重点分析

TreeSet, LinkedHashSet and HashSet 的区别

  • TreeSet, LinkedHashSet and HashSet 在java中都是实现Set的数据结构
TreeSet的主要功能用于排序
LinkedHashSet的主要功能用于保证FIFO即有序的集合(先进先出)
HashSet只是通用的存储数据的集合
  • 相同点
 Duplicates elements: 因为三者都实现Set interface,所以三者都不包含duplicate elements
 Thread safety: 三者都不是线程安全的,如果要使 用线程安全可以Collections.syn
  • 不同点
  Performance and Speed: HashSet插入数据最快,其次LinkHashSet,最慢的是TreeSet因为内部实现排序
  • Ordering: HashSet不保证有序,LinkHashSet保证FIFO即按插入顺序排序,TreeSet安装内部实现排序,也可以自定义排序规则
  • null:HashSet和LinkHashSet允许存在null数据,但是TreeSet中插入null数据时会报NullPointerException

set和list的区别:

1.有序性:list:保证按插入顺序                       set:存储顺序和取出顺序是不一致的
2.唯一性:list:可以有重复元素                       set:元素唯一
3.获取元素:list:可以通过下标索引,直接操作元素       set:不可以直接使用索引

如何使用集合

  1.需要唯一吗?
               需要:set   不需要:list
 2.需要指定顺序吗?
               需要:TreeSet         不需要:HashSet      和存储顺序一致:LinkedHashSet
 3.需要频繁的删除和增加吗?
               需要:LinkedList      不需要:ArrayList
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值