javase基础学习第五天

今天学的挺简单的,重点是 ArrayList和HashSet
时间: 2022/4/14

Collection接口

集合的作用:
是一种容器,可以用来存储引用的数据
特点:
集合的长度可以在创建后随意改变,可以增加和删除

集合体系:
集合的体系接口
Collection的常用方法:

方法说明
boolean add(E e)添加元素
boolean remove(Object e)根据元素删除,如果有多个相同只删除第一个
boolean contains(Object obj)判断是否包含某个元素
int size()获取集合元素个数
    public static void main(String[] args) {
        Collection<String> coll=new ArrayList<>();
        coll.add("小罗");
        coll.add("哦哦");
        System.out.println(coll);

        coll.remove("小罗");
        System.out.println(coll);

        boolean b = coll.contains("哦哦");
        System.out.println(b);

        int size = coll.size();
        System.out.println(size);
    }

结果:
collection操作的结果

Iterator迭代器

作用:
迭代器是帮我们对集合进行遍历的。没有get()方法的集合就需要用迭代器来遍历
常用方法:

方法说明
E next()获取一个元素,让指针向下移动
boolean hasNext()判断还有没有元素
 public static void main(String[] args) {
        Collection<String> coll=new ArrayList<>();
        coll.add("小罗");
        coll.add("哦哦");
        System.out.println(coll);
        //迭代器
        Iterator<String> iterator = coll.iterator();
        while (iterator.hasNext()){
            String next = iterator.next();
            System.out.println(next);
        }
    }

Iterator演示结构
并发修改异常(ConcurrentModificationException):
在迭代器遍历集合的时候,如果修改了集合的长度(用集合对象添加元素或删除元素)就会出现并发修改异常。
解决方式:
如果要在迭代器遍历的时候添加,现在无法解决。
如果要在迭代器遍历的时候删除,迭代器自己有删除方法。

public static void main(String[] args) {
        Collection<String> coll=new ArrayList<>();
        coll.add("小罗");
        coll.add("哦哦");
        System.out.println(coll);
        //迭代器
        Iterator<String> iterator = coll.iterator();
        while (iterator.hasNext()){
            String next = iterator.next();
            System.out.println(next);
            //删除操作
            if (next.equals("小罗")){
               iterator.remove();
            }
        }
    }

增强for循环

增强for是一种更简单的遍历方式,可以遍历集合或数组
格式:
格式:
for(元素类型 元素名 : 集合/数组){
}
原理:
增强for底层其实用到了迭代器,原理里面是有迭代器,所以他也会出现并发修改异常。
增强for和迭代器的区别:
在没有删除元素的需求时,一定是用增强for要比迭代器简单。
如果有删除元素的需求时,增强for做不到,只能使用迭代器。


List接口及子类

特点:
有索引 元素可重复 元素存取有序

 public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("大傻");
        list.add("二傻");
        list.add("三傻");
        System.out.println(list);
        //结果为:
        //[大傻, 二傻, 三傻]

list常用方法:

方法说明
void add(int index, E element)给指定索引位置添加元素
E get(int index)获取指定索引处的元素
E remove(int index)删除指定索引处的元素
E set(int index, E element)修改指定索引处的元素
//接上面内容
String s1 = list.get(2);
        System.out.println(s1);
        list.add(1,"三傻");
        System.out.println();
        System.out.println(list);
        list.remove("三傻");
        System.out.println(list);
        System.out.println();
        //返回的是要删除的内容
        String remove = list.remove(0);
        System.out.println(list);
        System.out.println(remove);
        System.out.println();
        //返回的是修改前的内容
        String set = list.set(0, "大傻");
        System.out.println(list);
        System.out.println(set);
        System.out.println();

ArrayList集合
底层是由数组实现的一种集合
特点:
增删慢(在非末尾的地方增删慢)
查询快
LinkedList集合
底层是由双向链表实现的一种集合
特点:
增删快
查询慢

Set接口及子类

HashSet集合有什么特点
元素没有索引 元素不能重复
元素存取无序
HashSet集合底层是哈希表

    public static void main(String[] args) {
        //元素没有索引  元素不能重复   元素存取无序
        //存取无序指的是存的顺序和获取看到的顺序不一致
        //但人家自己有一个排列的方式,不是随机的
        //创建HashSet
        HashSet<String> set = new HashSet<>();
        //添加元素
        set.add("夏洛");
        set.add("秋雅");
        set.add("马冬梅");
        set.add("马冬梅");
        System.out.println(set);  //[秋雅, 夏洛, 马冬梅]
    } 

对象的哈希值:
如果哈希值不同,那么两个对象一定内容不同
如果哈希值相同,那么两个对象内容不一定相同

public static void main(String[] args) {

        //每个对象都有哈希值,哈希值有什么特点?
        //如果哈希值不同,那么两个对象一定内容不同
        //如果哈希值相同,那么两个对象内容不一定相同

        //字符串对象举例

        int hash1 = "abc".hashCode();//96354
        System.out.println(hash1);

        int hash2 = "ab".hashCode();
        System.out.println(hash2);   //3105

        int hash3 = "Aa".hashCode();
        System.out.println(hash3);   //2112

        int hash4 = "BB".hashCode();
        System.out.println(hash4);   //2112
        /*
            哈希值计算:
                int hash = 0;
                循环:
                    hash = 31*hash + 字符值
             "abc"
                    hash = 31*hash + 97
                    hash = 31*hash + 98
                    hash = 31*hash + 99
         */
    }

HashSet如何保证的元素不重复:
HashSet判断对象是否重复使用了两个方法:
hashCode() 和 equals()

LinkedHashSet集合:
特点:
元素没有索引,元素不能重复,元素存取有序

总结

今天最重要的都在这个图里!!!!
今日总结

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皇家小黄

创作不易!!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值