java集合

集合:同一类型放在容器,名叫集合(引用数据类型,这是和数组的最大区别)
集合是一个动态的数组,数组的长度是不可变的,集合长度是可变的;
Collection:
集合,是一个接口,继承了Iterable,里面有很多方法
集合里的东西叫做元素,主要是增删改查;
object是所有类的的父类
在这里插入图片描述

List: 也是一个接口,继承了Collectiom.
特点: 有序,可以重复
常见的实现类:
ArrayList(数组实现) ,底层是Object数组。所有的增删改查都是基于数组进行的。
LinkedList()
特点: 内存空间连续

        ArrayList 格式
       ArrayList<String> list = new ArrayList<>();

<>:放的就是泛型,指的就是集合里面方的数据类型。
指定数组的数据类型
省去了从集合中取出数据时的强制类型转换
常见的应用:
获取元素个数的 size() :数组的长度和size不是一回事,如果size()小于数组长度,直接将元素放到数组里面。如果size()等于数组长度,会自动扩容。
add(元素);
remove(元素): 只能删除一个,如果有重复的数据,删除第一个;
remove(索引):删除指定索引位置的元素;
get(元素) : 通过索引获取
set(索引,元素):
添加的逻辑:
如果底层的数组元素满了,就要扩容,扩容1.5倍。然后将元素添加到容器
LinkedList: 链表
链表实现了 List 和 Deque两个接口
特点:内存空间不连续。
底层是Node, 分为3部分 前一部分 数据 后一部分
ArrayList和LinkedList区别:

  • ArrayList: 查询快,增删慢

  • LinkedList 查询慢,增删快

          查看源代码的时候:
           c:  class  类
           m: method 方法
           f: field  变量
    

    sort()
    Set: 也是一个接口,继承了Collectiom
    特点: 无序,不重复
    HashSet
    TreeSet

      HashSet   格式
      HashSet<Integer> set = new HashSet<>();
    

去重,HashSet开发时用的比较少,一般集合都是用ArrayList
在某些场合也需要给ArrayList去重,可以使用HashSet;

         ArrayList<String> names = new ArrayList<>();
         HashSet<String> set1 =  new HashSet<>(names);
         names = new ArrayList<>(set1);

HashSet和HashTable的区别:
HashSet是线程不安全的,效率高,允许null值;
HashTable是线程安全的,效率低,不允许null值;
map

TreeMap

HashMap:
双列集合
键是唯一的,值可以重复

     格式
     HashMap<String,Integer> map = new HashMap<>();//new HashMap<k<v> k键  v键  键对值 

增 put(键,值):键存在就是修改不存在就是添加
删 remove
查 get

jdk8 以后HashMap的数据结构是: 数组+ 链表+ 红黑树
当放入某个元素的时候,hashCode算出来要放入的位置,该位置存在元素,那么就以链表的方法放到下面,
如果元素超过8个,就变成红黑树。
如果红黑树的情况下,map删除元素,当红黑树中的元素少于6个的时候,红黑树变成链表。 泊松分布。
HashMap初始化的时候,数组长度为16.
HashMap负载因子:0.75元素个数超过数组长度的0.75倍,数组就会扩容,2倍;

              增强for循环      foreach循环
        实现了Iterable接口的都可以用
        for(泛型数据类型  变量 :  集合名称){
      操作变量
        }
     优点:  简单明了
     缺点:  不能操作索引
     for和foreach的区别
     for可以操作索引,但是语法结构相对复杂
     foreach不可以错做索引,但是语法结构相对简单
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值