骖六龙行御九州之第十八天——List,Set

今日内容

1.List

2.Set

一:List

1.1:List概述

  • 首先List和Set都属于有序的collection(也称为序列)

  • List接口:

1.有序的集合(有序

  • 什么是有序?——存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的

2.带索引的集合(索引

  • 通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)

3.集合中可以有重复元素(重复

  • 通过元素的equals方法,来比较是否为重复的元素

1.2如何使用List接口

1.2.1:构造方法

  • 因为是接口,他没有构造方法,要想获得实例就得

    • 多态

    • 内部类

    • 找方法

1.2.2:常用方法

  • 方法介绍

    • 增加元素方法

      • add(Object e):向集合末尾处,添加指定的元素

      • add(int index, Object e):向集合指定索引处,添加指定的元素,原有元素依次后移

    • 删除元素删除

      • remove(Object e):将指定元素对象,从集合中删除,返回值为被删除的元素

      • remove(int index):将指定索引处的元素,从集合中删除,返回值为被删除的元素

    • 替换元素方法

      • set(int index, Object e):将指定索引处的元素,替换成指定的元素,返回值为替换前的元素

    • 查询元素方法

      • get(int index):获取指定索引处的元素,并返回该元素

  • 注意:由于List集合拥有索引,因此List集合迭代方式除了使用迭代器之外,还可以使用索引进行迭代。

1.2.3:Iterator的并发修改异常

package list接口实例化;
​
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
​
public class Demo {
    public static void main(String[] args) {
        Collection<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        List<String> l =new ArrayList();
        l.add("a");
        l.add("b");
        l.add("c");
        Iterator<String> it = l.iterator();
        while (it.hasNext()){             //不允许做并发操作,一般做循环操作就是循环,不要再做更新操作
            if (it.next().equals("a")){
                it.remove();              //仅仅可以做删除,因为这个remove是iterator自带的,慎用
            }
        }
        System.out.println(l);
    }
}
  • 并发修改异常解决办法:在迭代时,不要使用集合的方法操作元素。

1.3:List接口数据结构

  • List接口下有很多个集合,它们存储元素所采用的结构方式是不同的,这样就导致了这些集合有它们各自的特点,供给我们在不同的环境下进行使用。

  • 数据存储的常用结构有:堆栈、队列、数组、链表。

1.堆栈 (先进后出)

2.队列 (先进先出)

3.数组 ()

  • 查找元素快:通过索引,可以快速访问指定位置的元素

  • 增删元素慢

4.链表

  • 查找元素慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素

  • 增删元素快

1.4ArrayList集合

  • ArrayList集合数据存储的结构是数组结构。元素增删慢,查找快

    • 构造方法

ArrayList()

面试题:List接口数据结构、ArrayList扩容机制

开发:ArryList:增删改查

1.5LinkedList集合

  • LinkedList集合数据存储的结构是链表结构。方便元素添加、删除的集合。

  • LinkedList是List的子类,List中的方法LinkedList都是可以使用

二:Set接口

    • Collection中可以存放重复元素,也可以不存放重复元素,List中是可以存放重复元素的。,Set接口,它里面的集合,所存储的元素就是不重复的。

2.1:Set概述

  • 通过元素的equals方法,来判断是否为重复元素

  • 特点

    • 不允许重复

    • 存取无序

2.1.1Set使用

  1. 构造

  2. 方法

2.1.1.1构造

 Set set = new HashSet();

2.1.1.2:特点研究

  • 不重复

import java.util.HashSet;
import java.util.Set;
​
public class Demo {
    public static void main(String[] args) {
        Set set = new HashSet();
        System.out.println(set.add("a"));
        System.out.println(set.add("a"));
​
        set.add("b");
        System.out.println(set);
    }
}
​
  • 无序

package Set接口;
​
import java.util.HashSet;
import java.util.Set;
​
public class Demo {
    public static void main(String[] args) {
        //不允许重复
        Set list = new HashSet<>();//无序
         list.add("a");
        System.out.println(list.add("a"));   //不允许重复
        list.add("张翼德");
        list.add(123);
        for (Object o :list){
            System.out.println(o);           //无序
        }
    }
}

2.1.1.3方法

  • 同Collection及子类一样

2.2:HashSet集合介绍

  • 此类实现Set接口,由哈希表支持(实际上是一个 HashMap集合)。

  • HashSet集合不能保证的迭代顺序与元素存储顺序相同。

  • HashSet集合,采用哈希表+红黑树结构存储数据,保证元素唯一性的方式依赖于:hashCode()与equals()方法。

2.3:HashSet集合存储数据的结构(哈希表)

  • 什么是哈希表呢?

    • 哈希表底层使用的也是数组机制,数组中也存放对象

    • 哈希表中存放对象时,会调用对象的hashCode方法,算出对象在表中的存放位置

    • 如果两个对象hashCode方法算出结果一样,这样现象称为哈希冲突

  • 哈希结构

    • 先算对象的哈希值,求出哈希表中的存储位置

        • 如果hash值一样,哈希冲突(有可能一样)

        • 如果哈希冲突了,在调用equals方法,比较内容,如果内容也相同,就认为存的内存一样的

  • 结论:对象内容,默认要让hash值也一样,以后要重写hashcode方法

    • toString:

    • equals:

    • hashCode

  • 总结:保证HashSet集合元素的唯一,其实就是根据对象的hashCode和equals方法来决定的。如果我们往集合中存放自定义的对象,那么保证其唯一,就必须复写hashCode和equals方法建立属于当前对象的比较方式

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值