集合(所有)----java

一. 集合的基础

1. 集合的由来

集合是容器类型 容器类型的还有(数组和stringbuffer)
对象数组长度不能被改变
集合类可以改变任意长度

2. 数组与集合的区别

数组的长度固定
集合的长度可变

数组存储的是同一类型的数据
集合存储的可以是任意类型的数据

数组可以存储基本数据类型 和引用数据类型
集合只能存储引用类型的数据

3. Collection

java 提供了不同的集合类,不同的集合类的数据结构不同
数据机构:数据的存储方式 (要能存储东西,并且能够使用这些数据)
集合的老大 collection
List (接口) set( 接口)
Collection功能
在这里插入图片描述
Collection 对象的add方法是在此集合的后面加上一个数据
Collection 对象的addAll方法是将任何另一个collection对象中的所有数据全部加到第一个对象中(里面的元素是可以重复的)
Remove方法也类似
System.out.println( c1.retainAll(c2));
//两个集合 如果第一个里面有第二个 则返回true 然后将交集放到第一个对象中
如果没有一个交集 则返回flase并且第一个对象变空

4. 集合的遍历

在这里插入图片描述
Object 无length方法如果要使用就要向下转型
String s1=(string)obj【i】;
集合的下标也是从0开始

5.Iterator 迭代器

①先创建一个集合
Collection c1=new arraylist();
C1.add();
C1.add();
C1.add();
C1.add();
//创建迭代器接口
Iterator it=c1.iterator();
//提取元素
It.next();获取集合内的下一个元素,,,其实就是本为元素,因为集合首先是空的
It.hasnext();查看集合内部是否为空 返回值是true 或者false

注意:复制代码的时候很容易吧那个代码的包也复制过来

6. 迭代器的注意事项

  • 循环尽量用while
  • 不要多次使用next方法
  • 迭代器是依赖于集合而存在的
  • 迭代器啥时候用啥时候创建

二. List集合

1. List

在这里插入图片描述
List的子类特点
list是有序的 意思是进来是啥顺序出去就是啥顺序 可重复
此类为list集合的特有功能

1.1 添加功能

                  在指定位置加入某各元素   不能元素越界
                  void  add (int index,objecct lement)

在这里插入图片描述

1.2 获取功能

 *    object get(int index)获取指定位置的元素

li1.get(1) 获取指定位置的数据
*列表迭代器
*ListInerator listIterator() list特有的功能

1.3 删除功能

 *    object remove(int index)//删除指定的元素

删除指定位置的元素 并且返回该元素

1.4 修改功能

 *  改变指定位置的数据		 
 * set(int index,E element);
 *   
 */

1.5 遍历功能:

利用get和size方法进行结合出来的遍历
for (int i = 0; i < li1.size(); i++) {
System.out.println(li1.get(i));
特有的迭代器
在这里插入图片描述
但是基本上不用,因为不通用(其实与基本的迭代器差不多,操作一样)

1.6 逆向遍历:(必须先正向遍历)

Hasprevious 判断是否有上一个元素
Previous 找到该元素
在这里插入图片描述

迭代器 是依赖于集合的不能存在并发执行修改
迭代器遍历元素的时候,通过集合是不能修改内容的
迭代器在添加元素的时候应该使用ListIterator中的add方法
用普通迭代器中add不行
新添加的元素是跟在刚才迭代的元素的后面

在这里插入图片描述

1.7 把数组转换为集合

Public static List asList(T…S) //把数组转换为集合
注意事项:
虽然是把数组转换为集合了 但是其本质还是数组 不能改变其长度

1.8 集合的嵌套遍历

Arrays.sort(i1);//对数组进行排序
在这里插入图片描述
注意:第一个集合的泛型类是一个集合 这样才能往里放

2. Verctor

Vector的特有功能:
Jdk 升级原因:

  1. 效率
  2. 安全
  3. 简化格式
    在这里插入图片描述

2.1 添加功能

Public void addElement(object obj)
在这里插入图片描述

2.2 获取功能

Public object elementAt(int index)==get(i)
Public enumeration emements()
在这里插入图片描述

3. linkedlist

在这里插入图片描述

3.1 添加功能

Public void addfirst() 在集合首部添加元素
Public void addlast() 在集合尾部添加元素 意义不大

3.2 移除功能

Public void removefirst()移除集合首部 并且返回该值
Public void removelast()移除集合尾部 并且返回该值
本来下一节是泛型 但是我把它放到se基础了如果想了解可以去看看

4. 增强for

4.1 增强for的格式

增强for的目标不能为空
即 对增强for的目标先进行不为空的判断
再进行操作 增强for其本质就是迭代器
格式:

For(元素数据类型 变量:数组或者collection集合){
使用变量即可,该变量就是元素
}

在这里插入图片描述

4.2 静态导入

格式: import static 包名.类名.方法名;
可以直接导入到方法的级别
注意事项:

  • 方法必须是静态的
  • 如果有多规格同名的静态方法,容易不知道使用谁
    这个时候要使用必须加前缀

三. set集合

1. set 的概念

set集合不包含重复元素 并且有序 不会按照自己输入的顺序 是个接口(从大到小)
set 集合:

  • 存储顺序和添加顺序不一定相同
  • 不可以保存相同的数据
  • 每个元素没有索引(即:不可以通过下标遍历,可通过迭代器)
    在这里插入图片描述

2.LinkedHashSet(是hashset的子类)

有两个数据机构 一个是链表 一个是hash表
A. 元素有序唯一
B. 由链表保证元素有序
C. 由哈希表保证元素唯一
D. 存取顺序一致

3. Treeset 默认排序 并且消除重复项

是排序基于treemap的put方法来进行排序的
还有比较器排序是依赖于compareTo()方法 而这个方法是定义在定义在Comparable里面的 所以要想重写该方法 就必须先Comparable接口 则就是自然排序
在这里插入图片描述
元素如何取出的 (前序遍历 中序遍历 后续遍历)
从根节点开始 按照左中右原则依次取出元素即可

A. 自然排序
在这里插入图片描述
B. 比较器排序
在这里插入图片描述

四. Map集合

1. Map集合的特点

将映射得值的对象,一个映射不能包含重复的键;
每个键最多只能映射到一个值

2 Map集合和collection集合的区别

  • A. map集合存储元素成对出现,map集合的键是唯一的,只可以重复出现,可理解为夫妻对
  • B. collection集合存储元素是单度出现的,collection的儿子set是唯一的 list是可重复的,可理解为是单独的
  • C. map集合的数据结构只针对于键有效,与值无关
    collection集合的数据结构是针对于元素有效

3. map的功能

  • A.添加功能 V put(k key, V value)
  • B.删除功能 void clear()清除所有的映射关系
    V remove (object key) 根据键移除键值对元素 并把值返回
  • C.获取功能 set<map,entry<k,v>> entrySet()=对象.entrySet
    V get (object ket) 根据键获取值
    Set(k) keyset 获取集合中所有键的集合
    Collection values() 获取集合中所有值的集合
  • D.长度功能 int size() 返回键值对的个数
  • E.判断功能 boolean containsKey(object key)
    判断集合是否有指定的键
    boolean containsKey(object key)
    判断集合是否有指定的值
    Boolean isEmpty()判断集合是否为空

4. Map的集合遍历

  • 方式一:
    获取所有键的集合
    遍历间的集合,获取到每一个键
    根据键找值
  • 方式二:
    获取所有键值对对象的集合
    遍历简直对对象的集合 获取倒每一个键值对对象
    根据键值对对象找键和值

5. LinkedHashMap<String, String>

LinkedHashMap 可以保持序列的有序性(即 你输入数据的顺序 HashMap的保证数据的唯一性 Linked保证数据的有序性)

6.TreeMap

TreeMap是基于红黑树的Map接口的实现
所以可以基于treemap的comparable接口的自然比较方法

7. HashMap和hashtable的区别

hashMap是用来替代Hashtable的 hashtable的用法和HashMap差不多
Hashtable 线程安全 不允许null键和null值
HashMap线程不安全 效率高 允许null键和null值

五. collections

1. collections和collection的区别

collection是单列 集合的顶层接口 下面还有set 和Map集合
collections是针对集合操作的工具类 有对集合进行排序和二分查找的方法

2. 方法

在这里插入图片描述

3. binarySearch

查找元素的时候如果没有找到的话就会 在元素最大个数前面+1 然后变成负

六 集合的总结

1. 集合

Collection(单列集合)
List(有序 可重复)
  • ArrayList
    底层数据结构是数组 查询块 增删慢
    线程不安全,效率高
  • Vector
    底层数据结构是数组 查询块 增删慢
    线程安全 效率低
  • LinkedList
    底层数据结构是链表 查询慢 增删快
    线程不安全 效率高
    Set(无序 唯一
    HashSet
    底层数据结构是hash表
    哈希表以来与两个方法 hashCode()和equals

执行顺序

  1. 首先判断hashCode值是否相同
    是 继续执行equals 看其返回值是true 还是false
    是true 说明元素重复 不添加
    是flase 直接添加道集合
    否 直接添加到集合
  2. 最终:
    自动生成hashCode 和equals即可
    LinkedHashSet
    底层数据结构是由链表和哈希表组成
    由链表保证元素有序
    由哈希表保证元素唯一

TreeSet
底层的数据结构是红黑树

  • 如何保证元素的唯一性?
    根据比较的返回值是否是0来决定

  • 如何保证元素的排序?
    两种方式

自然排序(元素具备比较行)让元素所属类实现comparable接口
比较器排序让集合接收一个comparato方法的实现类对象

Map(双列集合)
Map集合的数据结构仅仅针对键有效 与值无关
存储的是键值对形式的元素 键唯一 值可重复

HashMap
线程不安全 效率高
LinkedHashMap
Hashtable
线程安全 效率低
TreeMap

2. 如何选择使用集合

  • 是否是键值对象形式
    是:Map
  • 键是否需要排序
是:TreeMap
否:HashMap
不知道就是使用HashMap
否:Collections
  • 元素是否唯一
    是: Set
  • 元素是否需要排序
是:TreeSet
否:HashSet
不知道就使用 HashSet
否:List
  • 要安全吗
是:Vector()
否:ArrayList 或者LinkedList

增删多 LinkedList
查询多 ArrayList
不知道就使用ArrayList

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值