Collection框架常用方法简单介绍

//本人觉得重点的部分会用彩色标出

//本文章只做浅层解释,并不深入探究

1.什么是集合

    在Java中,集合就是一种容器,可以保存多个数据

2.有了数组,为什么还要有集合

    数组的弊端: 数组的长度是固定的

    集合的优点: 集合的长度是可变的

 

3.集合框架(主要分支)**************************

    集合根接口: Collection

    集合子接口: List接口 Set接口

    List接口: ArrayList LinkedList Vector(作用与ArrayList相近,但运行效率低,运用越来越少,几乎已被淘汰)

    Set接口:  HashSet LinkedHashSet TreeSet

4.集合根接口Collection中定义的所有集合的共有方法

    增: boolean add(E e);

    删: boolean remove(元素); void clear();

    改: 无  

    查: 无

其他方法:

    int size(),      //集合长度

    boolean contains(元素);      //判断集合中是否包含此元素,返回类型boolean

    boolean isEmpty();           //判断是否为空集合(个人感觉作用非常鸡肋,因为直接看size长度即可判断是否为空)

    Object[] toArray();          //将集合转变为数组

 

所有集合的通用遍历方式--迭代器

             1.迭代器的使用方式*********************:

//1.创建一个集合
Collection<String> names = new ArrayList<String>();
names.add("马尔扎哈");
names.add("迪丽热巴");
names.add("古力娜扎");
names.add("罗泽罗拉");
names.add("德玛西亚");
//2.使用迭代器遍历
//2.1 先获取迭代器
Iterator<String> it = names.iterator();
//2.2 循环的标准代码
while (it.hasNext()) {
    String next = it.next();
    System.out.println(next);
}

2.迭代器底层的指针原理

     a.刚刚获取的迭代器 指针指向第一个元素的开头

     b.调用hasNext方法时,只是判断后面有没有元素,指针不移动

     c.调用next方法时,复制出刚刚判断那个元素,同时指针向后移动

3.迭代器使用用于遍历

     在使用迭代器的过程,不能向集合中添加或者删除元素,否则迭代器就会抛出异常

     ConcurrentModificationException 并发修改异常

4.增强for循环*********************

     语法糖:迭代器的语法糖

     在JDK1.5之后推出增强for循环

格式:
     for(数据类型 变量名 : 集合/数组){

     System.out.println(变量名);

     }

     由于增强for循环底层使用迭代器,不能向集合中添加或者删除元素,否则底层迭代器就会抛出异常

  • List集合

1.List接口下所有的集合特点

     a.有序: 在Java有序不是指自然顺序,是指存取顺序一致(保存1 3 2 取出1 3 2)

     b.有索引

     c.元素可重复

2.List接口自己的特有方法(4个和下标有关的方法)

     增: boolean add(E e);     void add(int index,E e);

     删: boolean remove(元素);     E remove(int index);

     删除元素的方法,如果有多个相同元素,那么只删除第一个

     改: E set(int index,E newE);

     查: E get(int index);

3.List接口的实现类

     a.ArrayList

          数据结构: 底层采用 数组结构,所以增删慢,查询快

          方    法: Collection 7个 + List中 4个

          线程不安全,效率高

     b.Vector

          数据结构: 底层采用 数组结构,所以增删慢,查询快

          方    法: Collection 7个 + List中 4个

          线程安全,效率低

     c.LinkedList

          数据结构: 底层采用 链表结构,所以增删快,查询慢

          法: Collection 7个 + List中 4个

          大量的首位操作有关的方法(8个):

          - public void addFirst(E e): 添加元素到第一个

          - public void addLast(E e): 添加元素到最后一个

          - public E removeFirst(): 删除第一个元素,返回该元素

          - public E removeLast(): 删除最后一个元素,返回该元素

          - public E getFirst():获取第一个元素。

          - public E getLast():获取最后一个元素

          - public void push(E e); 向集合中添加元素,首位,和 addFirst一样的

          - public E pop();从集合中删除一个元素,首位 和 removeFirst一样的

4.哈希值

     a.什么是哈希值

          Java每一个对象的数字指纹

     b.如何获取对象的哈希值

          调用对象的hashCode方法

 

我们有三个结论:

a.我们Java中所有的对象地址值都是假的,而是对象的哈希值的16进制表示

b.哈希值是通过真正的地址值计算出来,根据一种散列算法(哈希算法)算出来

c.Java中是有地址值的,对象名中保存的就是地址值, 但是打印不出来

  • Set接口

1.Set接口的特点

     a.无序的 (无序也不是指自然顺序 而是存取顺序是否一致  存:1 3 2 取:1 3 2 )

      (但是LinkedHashSet除外,TreeSet是自然顺序)

     b.无索引

     c.元素唯一

2.Set接口无特有方法(方法和Collection接口是一样)

 

3.Set接口的实现类

HashSet: 底层使用哈希表结构,增删快查询快

     由于HashSet可以保证元素的唯一性,所以当添加重复元素时,添加失败!!!!

     如何证明: 只需要打印出add方法的返回值,结果为false即可证明

     使用自定义类型,也需要重写该类的hashCode和equals方法

LinkedHashSet: 底层使用链表+哈希表

     特点:增删快 查询快 但是它是有序的

     使用自定义类型,也需要重写该类的hashCode和equals方法

TreeSet: 底层二叉排序树

     特点: 它是无序的,但是它是有自然顺序的

     向TreeSet中添加元素时,TreeSet会对元素进行自然排序

     如果是数值,按照值的从小到大升序

     如果是字符,按照ASCII码值升序

     如果是字符串,按照首字母ASCII码值升序,首字母一样按照次字母ASCII码值升序,依次类推

 

4.哈希表结构扩展

a.哈希值: 对象的数字指纹

     怎么获取对象的哈希值: 对象名.hashCode()

     实际上我们平常看到的地址值,并不是真正的地址值,而是哈希值的16进制表示

b.哈希表结构:

     JDK1.8以前: 数组+链表

     JDK1.8以后: 数组+链表+红黑树

 

c.哈希表判断元素重复的依据是什么*************

     先比较新旧元素的哈希值,再使用equals判断是否返回true

     只有 哈希值相等,并且equals也是true 才判定元素重复,不保存

 

d.使用哈希表结构保存自定义类型时************

     为了保证元素的唯一性,我们必须重写hashCode和equals

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值